2016-07-27 7 views
-1

Я пытаюсь передать данные между двумя устройствами, использующими bluetooth. Я хочу преобразовать пользовательский NSObject в NSData.Преобразование пользовательских NSObject в NSData

Каков наилучший способ декодирования полученных NSData в пользовательский NSObject?

Спасибо!

+0

Вы можете сделать свой класс NSCoding податливыми и использовать 'NSKeyedArchiver', или перевод на JSON (и создать' initWithJSON: 'обычая init) и т. д. – Larme

ответ

3

Вы должны использовать NSCoding. NSCoding - простой протокол, с двумя способами: initWithCoder: и encodeWithCoder:. Классы, соответствующие NSCoding, могут быть сериализованы и десериализованы в данные, которые могут быть либо заархивированы на диск, либо распределены по сети.

NSCoding/NSKeyed​Archiver. Настоящий учебник NSCoding.

Архивирование

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:YourClass];

разархивирование

YourClass *objYourClass = [NSKeyedUnarchiver unarchiveObjectWithData:data];

Вы также можете обратиться мой answer. Сначала вам нужно создать класс Bean и реализовать initWithCoder: и encodeWithCoder:, после чего вы можете архивировать NSData из объекта класса bean и объекта класса Unarchive bean из NSData.

0

Мой очень простой ответ

Во-первых, мы должны реализовать encodeWithCoder и initWithCoder в NSObject.m и до того, что у меня есть 2 данные (имя пользователя и пароль) в примере NSObject класса.Чтобы я поставил this.You могу понять

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    //Encode properties, other class variables, etc 
    [encoder encodeObject:@"Dev" forKey:@"username"]; 
    [encoder encodeObject:@"[email protected]" forKey:@"password"]; 
} 

- (id)initWithCoder:(NSCoder *)decoder 
{ 
    if((self = [super init])) 
    { 
    //decode properties, other class vars 
    userName = [decoder decodeObjectForKey:@"username"]; 
    passWord = [decoder decodeObjectForKey:@"password"]; 
    } 
    return self; 
} 

Тогда в ViewController.m

Для Спасите

NSObjectClass *className = [[NSObjectClass alloc]init]; 
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:className]; 
[currentDefaults setObject:data forKey:@"DATA"]; 
[currentDefaults synchronize]; 

Для Получить

NSData *data = [currentDefaults objectForKey:@"DATA"]; 
className = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

Для Подробнее Пройтись Мой ANSWER