2016-07-27 4 views
-1

블루투스를 사용하여 2 개의 장치간에 데이터를 전송하려고합니다. 사용자 지정 NSObject를 NSData로 변환하려고합니다.사용자 지정 NSObject를 NSData로 변환

받은 NSData를 사용자 지정 NSObject로 디코딩하는 가장 좋은 방법은 무엇입니까?

감사합니다!

+0

을 통해 이동을 위해

를 들어

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

검색 init) 등 – Larme

답변

3

NSCoding을 사용해야합니다. NSCoding은 두 가지 방법, 즉 initWithCoder:encodeWithCoder:을 사용하는 간단한 프로토콜입니다. NSCoding을 따르는 클래스는 디스크에 보관하거나 네트워크를 통해 배포 할 수있는 데이터로 serialize 및 deserialize 할 수 있습니다.

NSCoding/NSKeyed​Archiver. 다음은 NSCoding의 자습서입니다.

보관

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:YourClass];

보관 취소

YourClass *objYourClass = [NSKeyedUnarchiver unarchiveObjectWithData:data];

또한 내 answer을 참조 할 수 있습니다. 먼저 bean 클래스를 생성하고 에서 bean 클래스 객체와 Unarchive bean 클래스 객체로부터 NSData을 아카이브 할 수 있다면 initWithCoder:encodeWithCoder:을 구현해야합니다.

0

내 아주 간단한 대답

먼저 우리가 NSObject.m에서 encodeWithCoder와 initWithCoder을 구현해야 내가 NSObject의 Class.For 예 2 개 데이터 (사용자 이름 및 암호)가 그 전에 내가 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]; 
저장

들어 `정의 : 상세 정보 내 ANSWER 당신은`initWithJSON를 클래스 준수 NSCoding 확인하고`NSKeyedArchiver`, 또는 JSON으로 번역을 사용 (그리고 만들 수