5

Per qualche ragione questo codice di esempio funziona:CFPropertyListCreateDeepCopy non riesce a elaborare serie/dizionario contenente NSNull

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

e questo codice produce nil a seguito della conversione:

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

ho cercato di trovare qualsiasi menzione di NSNull non è consentita quando si utilizza questa funzione. Ho il sospetto che abbia qualcosa a che fare con il modo in cui il metodo esamina se la proprietà è mutabile o meno, ma non posso davvero confermarlo con i fatti.

Qualche idea?

risposta

6

Come persone gentili dal forum di sviluppatori Apple ha sottolineato il problema è che Struttura Elenco Proprietà è piuttosto severa sui tipi di dati con cui può lavorare. NSNull non è uno di quelli consentiti.

Da apple docs:

elenchi di proprietà sono costruiti con i fondamentali tipi Nucleo Fondazione CFString, CFNumber, CFBoolean, CFDate e CFData.

+0

Sei a conoscenza di un'alternativa o di una soluzione alternativa per accettare un valore nullo, perché lo stiamo utilizzando sui dati di un'API JSON che ha "null" in alcuni punti? – Sathvik

+1

secondo questa fonte http://www.opensource.apple.com/source/CF/CF-1153.18/CFPropertyList.c (cerca CFPropertyListRef CFPropertyListCreateDeepCopy) non è del tutto possibile. Forse provare a sostituire null con una costante predefinita che è improbabile da incontrare nel tuo set di dati? –

Problemi correlati