将 NSNull 对象分配给 NSString



我正在编写一个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的键都已删除。

最新更新