CFPropertyListCreateDeepCopy no puede procesar la matriz/diccionario que contiene NSNull

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?

preguntado el 28 de agosto de 12 a las 13:08

1 Respuestas

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.

De documentos de Apple:

Property lists are constructed from the basic Core Foundation types CFString, CFNumber, CFBoolean, CFDate y CFData.

Respondido el 12 de Septiembre de 12 a las 20:09

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? - SP

segú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

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.