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

Sas*_*ats 5 objective-c core-foundation nsmutablearray nsmutabledictionary

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

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

并且此代码nil由于转换而产生:

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

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

有任何想法吗?

Sas*_*ats 6

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

来自apple docs:

属性列表是从基本的核心基础类型的构建CFString,CFNumber,CFBoolean,CFDate,和CFData.