我正在编写一个iOS应用程序,我需要从Azure通过移动服务从SQL数据库获取数据。
下载数据后,我得到了一个包含 SQL 表中所有属性的NSDictionary
。如果属性为空,则值为 NSNull
。
有没有办法在没有 if 语句的情况下将NSNull
传递给NSString
(我不想有 20 个 if 语句..)?
我写了一个类别只是为了处理这个问题。我将其与Core Data一起使用,但它也应该对您有所帮助。
@interface NSDictionary (Extensions)
- (id)NSNullToNilForKey:(NSString *)key;
@end
@implementation NSDictionary (Extensions)
- (id)NSNullToNilForKey:(NSString *)key
{
id value = [self valueForKey:key];
return value != [NSNull null] ? value : nil;
}
@end
样品使用:
NSString *value = [dictionary NSNullToNilForKey:@"key"];
您不能只分配它,但您可以使用如下所示的内容过滤掉所有NSNull
实例:
NSDictionary *dictionary = // data from server
NSDictionary *filteredDictionary = [dictionary mutableCopy];
NSSet *keysToRemove = [orig keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {
if (obj == [NSNull null]) {
return YES;
} else {
return NO;
}
}];
[filteredDictionary removeObjectsForKeys:[keysToRemove allObjects]];
现在,您拥有相同的字典,只是每个带有NSNull
的键都已删除。