您的位置:首页 > 大数据 > 人工智能

CFPropertyListCreateDeepCopy fails to process array / dictionary containing NSNull

2015-02-03 09:29 841 查看
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

activeoldestvotes

up vote2down
voteaccepted
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
CFString
,
CFNumber
,
CFBoolean
,
CFDate
,
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));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: