5

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

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使用此功能时不允许提及的任何内容。我怀疑它与方法检查属性是否可变的方式有关,但我不能用事实来支持这一点。

有任何想法吗?

4

1 回答 1

6

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

来自苹果文档

属性列表由基本核心基础类型CFStringCFNumberCFBooleanCFDate和构成CFData

于 2012-09-12T19:38:57.253 回答