CFPropertyListCreateDeepCopy fails to process array / dictionary containing NSNull

For some reason this sample code works:

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

and this code produces nil as a result of the conversion:

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

I tried to find any mention of NSNull not being allowed when using this function. I have a suspicion that it has something to do with the way method examines whether property is mutable or not, but I can't really back that up with facts.

Any ideas?


1 Answer

up vote 2 down vote accepted

As kind people from apple developer forum pointed out the issue is that Property List Structure is rather strict about data types it can work with. NSNull is not one of allowed ones. 

From apple docs:

Property lists are constructed from the basic Core Foundation types CFStringCFNumberCFBooleanCFDate, and CFData.


转载:http://stackoverflow.com/questions/12159205/cfpropertylistcreatedeepcopy-fails-to-process-array-dictionary-containing-nsnu



转换代码记录备份。注意:如果数据中有null,转换会返回nil

// NSArray --->>> NSMutableArray

 NSMutableArray *mutableArray = CFBridgingRelease(CFPropertyListCreateDeepCopy(NULL, (__bridge CFPropertyListRef)(arrayData), kCFPropertyListMutableContainersAndLeaves));



// NSDictionary--->>> NSMutableDictionary

NSMutableDictionary *mutableDict = (NSMutableDictionary *)CFBridgingRelease(CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (__bridge CFPropertyListRef)(dictData), kCFPropertyListMutableContainersAndLeaves));


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值