【问题标题】:Assign NSNull Object to NSString将 NSNull 对象分配给 NSString
【发布时间】:2014-02-20 23:31:04
【问题描述】:

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

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

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

【问题讨论】:

  • 该死!不过感谢您的快速回答!
  • 编写一个简单的帮助方法或函数,根据传入的字符串或NSNull 返回您想要的内容。那么你就不需要很多if 语句了。只是一个简单的方法或函数调用。
  • “将 NSNull 传递给 NSString”没有意义。当然,您可以将 NSNull 分配给键入 NSString* 的指针,但没有任何实际困难。也许你需要给我们一个你的问题的例子。

标签: ios nsstring nsnull


【解决方案1】:

我写了一个类别来处理这个问题。我将它与 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"];

【讨论】:

  • 谢谢,这正是我想要的!
  • 不客气。 :) 在将 JSON 结构转换为 Core Data 实体时,我广泛使用此类别,因为我使用的 JSON 反序列化器将空值反序列化为 [NSNull null]
  • 正是我想用的东西!
  • 你能列出如何实现这个的步骤吗?
  • @John 抱歉,我好多年没做过 iOS 编程了,不过应该像新建一个类文件和头文件一样简单吧?
【解决方案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]];

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

【讨论】:

    猜你喜欢
    • 2013-11-09
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多