0

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

下载数据后,我NSDictionary从 SQL 表中获得了所有属性。如果属性为空,则值为NSNull

有没有办法在没有 IF 语句的情况下传递NSNullNSString我不想有 20 个 if 语句..)?

4

2 回答 2

7

我写了一个类别来处理这个问题。我将它与 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"];
于 2014-02-20T23:47:20.370 回答
2

您不能只分配它,但您可以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]];

现在您有了相同的字典,只是每个带有 an 的键NSNull都已被删除。

于 2014-02-20T23:49:15.920 回答