2014-11-25 5 views
1

NSManagedObjectNSData 개체로 변환하려면 어떻게해야합니까?관리되는 개체를 데이터 개체로 변환

저는 Core Data와 Multipeer Connectivity Framework에 익숙하지 않습니다.

Multipeer Connectivity Framework을 통해 2 개의 기기간에 데이터를 전송해야합니다. NSData 객체가 필요하기 때문에 MPC를 통해 단순히 전송할 수 없다는 것을 이해합니다.

이러한 기능을 제공하는 타사 라이브러리가 있습니까?

+0

다음을 참조하십시오 : http://stackoverflow.com/a/16445901/730701 – Adam

답변

0

이렇게하십시오. NSCoding 프로토콜을 사용해야합니다. 그런 다음 개체를 NSData로 인코딩 할 수 있습니다. 다시 원래 객체를 디코드하려면 NSKeyedUnarchiver를 사용하십시오. .H

@interface Testting : NSManagedObject<NSCoding> 

에서

이하는 .m

NSData *data=[NSKeyedArchiver archivedDataWithRootObject:hereyourObject]; 

// 당신의 원래 개체 수

Testting *Obj = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
+0

당신은 이것을 시도했습니다 @ Scott – Sport

+0

NSManagedObject는 NSCoding을 따르지 않기 때문에 작동하지 않을 것입니다. @Sanjay가 답변에 설명하는대로 관리 객체 하위 클래스를 만드는 경우 작동 할 수 있습니다. –

0

당신은 NSCoding 프로토콜을 사용해야합니다. NSKeyedAchiever를 사용하면 객체를 NSData로 인코딩 할 수 있습니다. 다시 원래 객체를 디코드하려면 NSKeyedUnarchiver를 사용하십시오.

@interface Test : NSManagedObject <NSCoding> 
@property (nonatomic, retain) NSString *title; 
@end 

@implementation Test 
@dynamic title; 

- (id)initWithCoder:(NSCoder *)coder { 
    NSEntityDescription *entity = 
    [NSEntityDescription entityForName:@"Test" inManagedObjectContext:<YourContext>]; 

    self = [super initWithEntity:entity insertIntoManagedObjectContext:nil]; 
    NSArray * attributeNameArray = 
    [[NSArray alloc] initWithArray:self.entity.attributesByName.allKeys]; 

    for (NSString * attributeName in attributeNameArray) { 
     [self setValue:[aDecoder decodeObjectForKey:attributeName] forKey:attributeName]; 
    } 
    return self; 
} 

- (void)encodeWithCoder:(NSCoder *)coder { 
    [coder encodeObject:self.title forKey:@"title"]; 
} 
@end 

//converting to NSData 
NSData *archivedObject = [NSKeyedArchiver archivedDataWithRootObject:testObj]; 

//get your original object 
Test *testObj = [NSKeyedUnarchiver unarchiveObjectWithData:archivedObject]; 
1

여기서는 NSCoding이 좋지 않습니다. 그 이유는 내부 관리 객체 ID와 예기치 않은 동기화 시나리오에서 발생할 수있는 무수한 다른 문제로 인해 객체가 서로 다른 두 장치에서 동일하지 않기 때문입니다.

문제를 해결하고 개체를 NSDictionary 유형으로 변환 한 다음 사전 (또는 사전 배열)에 표준 NSData API를 사용하는 것이 좋습니다.

관련 문제