5

Por alguna razón funciona este código de ejemplo:CFPropertyListCreateDeepCopy no puede procesar matriz/diccionario que contiene NSNull

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

y este código produce nil como resultado de la conversión:

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

He intentado encontrar cualquier mención de NSNull no está permitida al usar esta función. Sospecho que tiene algo que ver con la forma en que el método examina si la propiedad es mutable o no, pero realmente no puedo respaldarlo con hechos.

¿Alguna idea?

Respuesta

6

Como personas amables del foro de desarrolladores de Apple señalaron que el problema es que la estructura de la lista de propiedades es bastante estricta con respecto a los tipos de datos con los que puede trabajar. NSNull no es uno de los permitidos.

De apple docs:

listas de propiedades se construyen a partir de los tipos básicos Fundación Core CFString, CFNumber, CFBoolean, CFDate, y CFData.

+0

¿Conoces una alternativa o alternativa para aceptar un valor nulo, porque estamos utilizando esto en datos de una API JSON que tiene 'null' en algunos lugares? – Sathvik

+1

de acuerdo con esta fuente http://www.opensource.apple.com/source/CF/CF-1153.18/CFPropertyList.c (busque CFPropertyListRef CFPropertyListCreateDeepCopy) no es del todo posible. Tal vez intente reemplazar nulo con constante predefinida que es poco probable que se encuentre en su conjunto de datos. –

Cuestiones relacionadas