CFPropertyListCreateDeepCopy no puede procesar la matriz/diccionario que contiene NSNull
Frecuentes
Visto 697 veces
5
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.
¿Alguna idea?
1 Respuestas
6
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.
Property lists are constructed from the basic Core Foundation types
CFString
,CFNumber
,CFBoolean
,CFDate
yCFData
.
Respondido el 12 de Septiembre de 12 a las 20:09
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas objective-c nsmutablearray nsmutabledictionary core-foundation or haz tu propia pregunta.
Do you know of an alternative or a workaround to accept a null value, because we're using this on data from a JSON API which has
null
¿en algunos lugares? - SPsegún esta fuente opensource.apple.com/source/CF/CF-1153.18/CFPropertyList.c (search for CFPropertyListRef CFPropertyListCreateDeepCopy) it's not quite possible. Maybe try replacing null with predefined constant that is unlikely to be encountered in your data set? - Zats de faja