5

Aus irgendeinem Grund dieser Beispielcode funktioniert zu verarbeiten:CFPropertyListCreateDeepCopy versagt Array/Wörterbuch enthält NSNull

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

und dieser Code erzeugt nil als Ergebnis der Umwandlung:

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

Ich habe versucht, zu finden jede Erwähnung von ist nicht erlaubt, wenn diese Funktion verwendet wird. Ich habe den Verdacht, dass es etwas damit zu tun hat, wie die Methode untersucht, ob Eigentum veränderbar ist oder nicht, aber ich kann das nicht mit Fakten untermauern.

Irgendwelche Ideen?

Antwort

6

Als nette Leute von Apple Entwickler Forum wies darauf hin, dass die Eigenschaft List Structure ziemlich streng über Datentypen ist, mit denen es arbeiten kann. ist nicht eine der erlaubten.

Von apple docs:

Objektlisten aus den Grundtypen Core Foundation aufgebaut sind CFString, CFNumber, CFBoolean, CFDate und CFData.

+0

Kennen Sie eine Alternative oder eine Problemumgehung, um einen Nullwert zu akzeptieren, weil wir dies auf Daten von einer JSON-API verwenden, die an einigen Stellen "null" hat? – Sathvik

+1

nach dieser Quelle http://www.opensource.apple.com/source/CF/CF-1153.18/CFPropertyList.c (Suche nach CFPropertyListRef CFPropertyListCreateDeepCopy) ist es nicht ganz möglich. Versuchen Sie vielleicht, null durch eine vordefinierte Konstante zu ersetzen, die in Ihrem Datensatz wahrscheinlich nicht vorkommt. –