CFPropertyListCreateDeepCopy fails to process array / dictionary containing NSNull
core-foundation, nsmutablearray, nsmutabledictionary, objective-c
Solution
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`.
Problem
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?