2012-02-15 3 views
2

Я собираюсь изучить bluetooth-взаимодействие на iPhone. Теперь я читаю, что единственным объектом, который может быть передан, является объект NSData. Теперь я хочу передать свои «персональные» объекты. Класс выглядит примерно так:NSData на пользовательский класс?

@interface Character : NSObject <NSCoding> 
{ 
    UIImage *characterImage; 
    int health; 
    NSString *name; 
} 

-(void) initWithStats; 
-(void) addToViewController: (UIViewController *)theView; 

-(void) encodeWithCoder:(NSCoder *)encoder; 
-(void) initWithCoder:(NSCoder *)decoder; 

@end 

Теперь я знаю, что я должен соответствовать протоколу NSCoding и реализовать эти 2 метода, однако, я не совсем уверен, что делать здесь. Я знаю, что мне как-то нужно иметь возможность создавать экземпляры этого класса, а затем «распаковывать/распаковывать» их, когда объект NSData принимается другим устройством.

Итак, любой совет здесь очень ценится: =) Я очень новичок в программировании Bluetooth и никогда раньше не работал с этим или NSData. Так что спасибо по заранее :)

/JBJ

ответ

4

Это звучит, как вы на самом деле просто спрашивают, как реализовать -encodeWithCoder: и -initWithCoder:. Это довольно просто:

-(void) encodeWithCoder:(NSCoder *)encoder 
{ 
    [encoder encodeObject:characterImage forKey:@"character image"]; 
    [encoder encodeInt:health forKey:@"health"]; 
    [encoder encodeObject:name forKey:@"name"]; 
} 

Это все. -initWithCoder: работает точно так же, за исключением того, что вы вызываете дополнительные методы, такие как: characterImage = [decoder decodeObjectForKey:@"character image"];.

Если вам необходимо предоставить данные в определенном формате для работы с целевым устройством, которое не поддерживает формат архива, вы можете сделать это вместо этого и использовать метод -encodeBytes:length:forKey:, чтобы хранить все, что вам нравится, или записывать данные в ваш собственный формат в объект NSMutableData, а затем используйте -encodeObject:forKey:. Вашему целевому устройству все равно может понадобиться найти ваши данные в любом конверте, который хранит его кодер; вы можете сделать это проще, начиная с известной серии байтов. Я не уверен, что это необходимо в вашем случае, но это то, что нужно иметь в виду.

+1

Вау, это на самом деле звучит довольно прямолинейно. Таким образом, эта NSData фактически содержит несколько объектов, все упакованные вместе, а затем этот объект NSData передается через bluetooth, а другое устройство «распаковывает» объект NSData и начинает работать с объектами, содержащимися в нем. я получил его или? Еще раз спасибо. – Seerex

Смежные вопросы