我正在编写一个iOS应用程序,我需要通过Azure上的移动服务从SQL数据库中获取数据。
下载数据后,我得到一个NSDictionary
,其中包含SQL表中的所有属性。如果属性为空,则值为NSNull
。
有没有办法在没有IF语句的情况下将NSNull
传递给NSString
(我不希望有20条if语句......)?
答案 0 :(得分:6)
我写了一个类别只是为了处理这个问题。我将它与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"];
答案 1 :(得分:1)
您不能只是分配它,但可以使用以下内容过滤掉所有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
的每个密钥。