CFPropertyListCreateDeepCopy无法处理包含NSNull的数组/字典

时间:2012-08-28 12:27:18

标签: objective-c nsmutablearray nsmutabledictionary core-foundation

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

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的情况。我怀疑它与方法检查财产是否可变的方式有关,但我无法用事实来支持这一点。

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

正如来自苹果开发者论坛的善良人士所指出的那样,问题是财产清单结构对于可以使用的数据类型是相当严格的。 NSNull不是允许的。

来自apple docs

  

属性列表是从基本的Core Foundation类型CFStringCFNumberCFBooleanCFDateCFData构建的。