如何将NSManagedObject
转换为NSData
对象?
我是Core Data和Multipeer Connectivity Framework的新手。
我需要通过Multipeer Connectivity Framework在两台设备之间传输数据。我知道我不能简单地通过MPC传输,因为它需要一个NSData对象。
是否有任何提供此类功能的第三方库?
答案 0 :(得分:2)
我认为NSCoding
在这里不是一个好主意。原因是两个不同设备上的对象由于其内部托管对象ID以及意外同步方案中可能出现的大量其他可能问题而不会相同。
我强烈建议您解决问题并将对象转换为NSDictionary
类型,然后在字典(或字典数组)上使用标准NSData
API。
答案 1 :(得分:0)
试试这样 您应该使用NSCoding协议,然后您可以将对象编码为NSData。再次如果要解码原始对象,请使用NSKeyedUnarchiver。
in .h
@interface Testting : NSManagedObject<NSCoding>
这是在.m
NSData *data=[NSKeyedArchiver archivedDataWithRootObject:hereyourObject];
//获取原始对象
Testting *Obj = [NSKeyedUnarchiver unarchiveObjectWithData:data];
答案 2 :(得分: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];