Ios 解码器通过蓝牙连接崩溃

Ios 解码器通过蓝牙连接崩溃,ios,ios4,bluetooth,nscoding,Ios,Ios4,Bluetooth,Nscoding,我有一个对象,我想通过蓝牙发送到另一个设备。我已成功设置蓝牙连接并传输编码的NSString;但是,我还没有弄清楚如何正确使用归档和编码工具来发送对象 我想发送下面定义的名为ChatMessage的对象。它实现了NSCoding委托方法initWithCoder和encodeWithCoder,如下所示 在第二个代码段中,我有用于发送和接收数据的代码,即导致调用de编码器的方法 它在解码方法的最后一行不断崩溃。我一直在努力找出到底出了什么问题。任何帮助都将不胜感激 @interface Chat

我有一个对象,我想通过蓝牙发送到另一个设备。我已成功设置蓝牙连接并传输编码的NSString;但是,我还没有弄清楚如何正确使用归档和编码工具来发送对象

我想发送下面定义的名为ChatMessage的对象。它实现了NSCoding委托方法initWithCoder和encodeWithCoder,如下所示

在第二个代码段中,我有用于发送和接收数据的代码,即导致调用de编码器的方法

它在解码方法的最后一行不断崩溃。我一直在努力找出到底出了什么问题。任何帮助都将不胜感激

@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;
}
---代码崩溃了,因为我

[数据发布]


我是用仪器工具找到的。

我想我刚刚回答了我自己的问题。我不知道为什么,但我有[数据发布];这是传递给接收数据函数的参数。我把那件事说了出来。现在一切都正常了。我还要指出,您应该在
-initWithCoder:
方法中调用
[super init]
。Alex,这是我在代码中拥有并删除的东西,因为ChatMessage是一个NSObject,我的理解是这不是必需的。这两种方法都有效。如果它是这样一个基本的对象,那么为什么需要它呢?
- (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];


}