Сбой декодера через соединение Bluetooth
У меня есть объект, который я хочу отправить на другое устройство через Bluetooth. Я успешно настроил соединение Bluetooth и передал закодированную строку NSString; однако я не понял, как правильно использовать инструменты архивации и кодирования для отправки объекта.
Я хочу отправить определенный ниже объект под названием ChatMessage. Он реализует методы делегирования NSCoding initWithCoder и encodeWithCoder, как показано ниже.
Во втором фрагменте кода у меня есть код для отправки и получения данных, т.е. методы, которые приводят к вызову декодера.
Он продолжает падать в последней строке метода декодирования. Я изо всех сил пытался понять, что происходит не так. Любая помощь будет принята с благодарностью!
@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;
}
На мой взгляд, протокол для функций делегата PeerPicker.
- (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];
}
1 ответ
--- код был сбой, потому что у меня было
[выпуск данных];
Я нашел это с помощью инструмента инструментов.