将NSNull对象分配给NSString

时间:2014-02-20 23:31:05

标签: ios nsstring nsnull

我正在编写一个iOS应用程序,我需要通过Azure上的移动服务从SQL数据库中获取数据。

下载数据后,我得到一个NSDictionary,其中包含SQL表中的所有属性。如果属性为空,则值为NSNull

有没有办法在没有IF语句的情况下将NSNull传递给NSString(我不希望有20条if语句......)?

2 个答案:

答案 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的每个密钥。