【问题标题】:CFPropertyListCreateDeepCopy fails to process array / dictionary containing NSNullCFPropertyListCreateDeepCopy 无法处理包含 NSNull 的数组/字典
【发布时间】:2012-08-22 22:59:13
【问题描述】:

由于某种原因,此示例代码有效:

NSArray *immutable = @[ @"a", @"b", @"c" ];
NSMutableArray *mutable = (__bridge  id)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (__bridge  CFArrayRef)immutable, kCFPropertyListMutableContainers);

并且此代码作为转换的结果生成nil

NSArray *immutable = @[ @"a", [NSNull null], @"c" ];
NSMutableArray *mutable = (__bridge  id)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (__bridge  CFArrayRef)immutable, kCFPropertyListMutableContainers);

我试图找到在使用此功能时不允许提及NSNull。我怀疑它与方法检查属性是否可变的方式有关,但我无法用事实来支持这一点。

有什么想法吗?

【问题讨论】:

    标签: objective-c nsmutablearray nsmutabledictionary core-foundation


    【解决方案1】:

    正如苹果开发者论坛的好心人指出的那样,问题在于属性列表结构对它可以使用的数据类型相当严格。 NSNull 不是允许的之一。

    来自apple docs

    属性列表由基本核心基础类型CFStringCFNumberCFBooleanCFDateCFData 构成。

    【讨论】:

    • 您知道接受空值的替代方法或解决方法吗,因为我们在某些地方使用 null 的 JSON API 中的数据?
    • 根据这个来源opensource.apple.com/source/CF/CF-1153.18/CFPropertyList.c(搜索CFPropertyListRef CFPropertyListCreateDeepCopy)这不太可能。也许尝试用您的数据集中不太可能遇到的预定义常量替换 null?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    相关资源
    最近更新 更多