0

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の例を使用しています。

4

1 に答える 1

0

Bonjour について私が理解していることから、任意のデータを送信することはできますが、それを読んでも NSData オブジェクトを直接取得することはできません。私はこの質問を参考にします:

Cocoa Touch Bonjour NSNetService アドレスと uint8_t の扱い方

したがって、データを読み取るときは、次のような NSData オブジェクトを作成します。

NSData* data = [NSData dataWithBytes: buffer length: actuallyRead];
//                              ^                ^
//                            Data read       Number of bytes read
于 2013-02-11T22:38:48.163 に答える