如何將我的NSManagedObject
轉換爲NSData
對象?將託管對象轉換爲數據對象
我是Core Data和Multipeer Connectivity Framework的新手。
我需要通過Multipeer Connectivity Framework在2個設備之間傳輸數據。我知道我不能簡單地通過MPC進行傳輸,因爲它需要一個NSData對象。
是否有任何提供此類功能的第三方庫?
如何將我的NSManagedObject
轉換爲NSData
對象?將託管對象轉換爲數據對象
我是Core Data和Multipeer Connectivity Framework的新手。
我需要通過Multipeer Connectivity Framework在2個設備之間傳輸數據。我知道我不能簡單地通過MPC進行傳輸,因爲它需要一個NSData對象。
是否有任何提供此類功能的第三方庫?
試試這個 你應該使用NSCoding協議,然後你可以將你的對象編碼到NSData。再次如果你想解碼你的原始對象使用NSKeyedUnarchiver。
在.H
@interface Testting : NSManagedObject<NSCoding>
而這.M
NSData *data=[NSKeyedArchiver archivedDataWithRootObject:hereyourObject];
//得到你的原始對象
Testting *Obj = [NSKeyedUnarchiver unarchiveObjectWithData:data];
你試過這@Scott – Sport 2014-11-25 06:27:16
這不會工作,因爲NSManagedObject不符合'NSCoding'。如果您在@Sanjay的答案中描述了創建託管對象的子類,它可能會起作用。 – 2014-11-25 17:26:39
您應該使用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];
我認爲NSCoding
在這裏不是一個好主意。原因是兩個不同設備上的對象由於其內部管理對象ID以及在意外同步場景中可能發生的無數其他可能的問題而不同。
我強烈建議您搗亂並將您的對象轉換爲NSDictionary
類型,然後在字典(或字典數組)上使用標準NSData
API。
看到這個:http://stackoverflow.com/a/16445901/730701 – Adam 2014-11-25 06:54:55