Bluetooth経由で別のデバイスに送信したいオブジェクトがあります。Bluetooth接続を正常にセットアップし、エンコードされたNSStringを転送しました。ただし、アーカイブおよびエンコードツールを正しく使用してオブジェクトを送信する方法がわかりません。
以下に定義されているChatMessageというオブジェクトを送信したいと思います。以下に示すように、NSCodingデリゲートメソッドinitWithCoderおよびencodeWithCoderを実装します。
2番目のコードスニペットには、データを送受信するためのコード、つまり、デエンコーダーが呼び出される結果となるメソッドがあります。
デコードメソッドの最後の行でクラッシュし続けます。私は何が悪いのかを理解するのに苦労してきました。どんな助けでも大歓迎です!
@interface ChatMessage : NSObject <NSCoding> {
NSString *sender;
NSString *message;
}
@property (nonatomic, retain) NSString *sender;
@property (nonatomic, retain) NSString *message;
@end
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:sender forKey:@"sender"];
[coder encodeObject:message forKey:@"message"];
}
- (id)initWithCoder:(NSCoder *)coder {
sender = [[coder decodeObjectForKey:@"sender"] retain];
message = [[coder decodeObjectForKey:@"message"] retain];
return self;
}
私の見解では、PeerPickerDelegate関数のプロトコル。
- (void) receiveData:(NSData *)data
fromPeer:(NSString *)peer
inSession:(GKSession *)session
context:(void *)context {
ChatMessage *aMsg = [[ChatMessage alloc] init];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]
initForReadingWithData:data];
@try {
aMsg = [unarchiver decodeObjectForKey:@"myMessage"];
}
@catch (NSException *exception) {
NSLog(@"Error: %@", exception);
}
@finally {
}
if (!messages) messages = [[NSMutableArray alloc] init];
[messages addObject:aMsg];
// reload the table
[messageList reloadData];
[unarchiver finishDecoding];
[unarchiver release];
[data release];
}