NSData на пользовательский класс? - PullRequest
2 голосов
/ 15 февраля 2012

Я собираюсь изучить взаимодействие Bluetooth на iPhone.Теперь я прочитал, что единственный объект, который можно передать, это объект 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

1 Ответ

4 голосов
/ 15 февраля 2012

Похоже, вы действительно просто спрашиваете, как реализовать -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: для этого. Вашему целевому устройству все еще может понадобиться найти ваши данные в любом конверте, в котором их хранит кодер; Вы можете сделать это проще, начав с известной серии байтов. Я не уверен, нужно ли это в вашем случае, но об этом нужно помнить.

...