2014-11-25 61 views
1

如何將我的NSManagedObject轉換爲NSData對象?將託管對象轉換爲數據對象

我是Core Data和Multipeer Connectivity Framework的新手。

我需要通過Multipeer Connectivity Framework在2個設備之間傳輸數據。我知道我不能簡單地通過MPC進行傳輸,因爲它需要一個NSData對象。

是否有任何提供此類功能的第三方庫?

+0

看到這個:http://stackoverflow.com/a/16445901/730701 – Adam 2014-11-25 06:54:55

回答

0

試試這個 你應該使用NSCoding協議,然後你可以將你的對象編碼到NSData。再次如果你想解碼你的原始對象使用NSKeyedUnarchiver。

在.H

@interface Testting : NSManagedObject<NSCoding> 

而這.M

NSData *data=[NSKeyedArchiver archivedDataWithRootObject:hereyourObject]; 

//得到你的原始對象

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

你試過這@Scott – Sport 2014-11-25 06:27:16

+0

這不會工作,因爲NSManagedObject不符合'NSCoding'。如果您在@Sanjay的答案中描述了創建託管對象的子類,它可能會起作用。 – 2014-11-25 17:26:39

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。