Crash al tomar la image de un ABP específico

Estoy capturando imágenes de los contactos de los usuarios en su Libreta de direcciones / Contacts.app iOS. Y ponerlos en un dictionary para cargar como JSON.

Estoy teniendo el siguiente error:

2012-12-05 10:38:01.286 ContactsApp[6247:713f] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (__NSCFData)' *** First throw call stack: (0x2de6012 0x286ce7e 0x2de5deb 0x20926fe 0x2096b21 0x2dd3cdf 0x2dd387d 0x2dd37c5 0x20966fa 0x209262d 0x2096b21 0x2dd3cdf 0x2dd387d 0x2dd37c5 0x20966fa 0x209262d 0x20969af 0x2ddfe7c 0x2ddfa16 0x2ddf925 0x20968b8 0x2092679 0x2096b21 0x2dd3cdf 0x2dd387d 0x2dd37c5 0x20966fa 0x209262d 0x20923bd 0x209579c 0x1cad5 0x67475 0x66a87 0x14399cd 0x746008f 0x3dc253f 0x3dd4014 0x3dc52e8 0x3dc5450 0x90e36e12 0x90e1ecca) libc++abi.dylib: terminate called throwing an exception 

He usado el siguiente código:

 if (ABPersonHasImageData(addressBookContact)) { NSMutableDictionary *imageDictionary = [NSMutableDictionary dictionary]; NSData *thumbnailImageData = (__bridge NSData *)ABPersonCopyImageDataWithFormat(addressBookContact, kABPersonImageFormatThumbnail); NSData *originalImageData = (__bridge NSData *)ABPersonCopyImageDataWithFormat(addressBookContact, kABPersonImageFormatOriginalSize); if (thumbnailImageData) [imageDictionary setObject:thumbnailImageData forKey:@"thumbnailImage"]; if (originalImageData) [imageDictionary setObject:originalImageData forKey:@"originalImage"]; [contactDictionary setObject:imageDictionary forKey:@"image"]; } 

El error se produce cuando bash ubicar la matriz en esta request:

 [addressBookArray addObject:contactDictionary]; if ([addressBookArray count] % 15 == 0) { // I'm using AFNetworking [[APIClient shanetworkingClient] requestWithMethod:@"POST" path:@"cmd/addContact" parameters:@{ @"addressBookEntries" : addressBookArray }]; [addressBookArray removeAllObjects]; } 

Su problema es que está intentando poner objects NSData en un object JSON. En lugar de agregar los datos de image a imageDictionary, agregue la encoding base64 de las imágenes a imageDictionary y no debería tener ningún problema.

Matt Gallagher tiene una práctica class para manejar base64 aquí: http://www.cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html

Parece que AFNetworking está intentando analizar sus parameters en JSON, pero le está pasando un NSData. Aunque su pasaje a un NSDictionary, que es válido, esos types nesteds deben ser otros NSDiccionarios, NSArrays, NSStrings y NSNumbers. Si desea agregar la image NSDatas, debe usar un tipo de contenido diferente y agregar los datos de la image.