Bonjour経由でNSMutableArrayを送信します
- (void)sendArtwork {
NSMutableArray *dataArray = [[NSMutableArray alloc] init];
NSData *imageData = [self PNGRepresentationOfImage:[bHelp getArtwork:[playerPref selectedRow]]];
[dataArray addObject:songString];
[dataArray addObject:artistString];
[dataArray addObject:imageData];
NSData *finalData = [NSKeyedArchiver archivedDataWithRootObject:dataArray];
[self.server sendData:finalData error:nil];
}
- (NSData *)PNGRepresentationOfImage:(NSImage *)image {
[image lockFocus];
NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, image.size.width, image.size.height)];
[image unlockFocus];
return [bitmapRep representationUsingType:NSJPEGFileType properties:nil];
}
そして、受信してアーカイブを解除します
NSMutableArray *dataArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
このコードは、シミュレーターで問題なく機能します。しかし、デバイスで実行するとすぐに、アンアーカイバーはこのエラーをスローします。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x62, 0x70, 0x6c, 0x69, 0x73, 0x74, 0x30, 0x30)'
imageData
可変配列を送信しない場合、デバイスでエラーは発生しません。私はBillDudneyのiOSの例とBradLarsonのMacの例を使用しています。