3

iOSアドレスブック/Contacts.appでユーザーの連絡先から画像を取得しています。そして、それらを辞書に入れてJSONとしてアップロードします。

次のエラーが発生します。

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

私は次のコードを使用しています:

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"];
}

このリクエストに配列を配置しようとすると、エラーが発生します。

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

2 に答える 2

2

問題は、NSData オブジェクトを JSON オブジェクトに入れようとしていることです。画像データを imageDictionary に追加する代わりに、画像の base64 エンコーディングを imageDictionary に追加すれば問題ありません。

Matt Gallagher には、base64 を処理するための便利なクラスがあります: http://www.cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html

于 2012-12-05T16:23:48.397 に答える
0

AFNetworking がパラメーターを JSON に解析しようとしているように見えますが、それを NSData に渡しています。有効なNSDictionaryを渡していますが、ネストされた型は、他のNSDictionaries、NSArray、NSString、およびNSNumberのいずれかである必要があります。画像の NSData を追加する場合は、別のコンテンツ タイプを使用して画像データを追加する必要があります。

于 2012-12-05T16:24:34.417 に答える