HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – NSManagedObject是否符合NSCoding大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要跨设备传输单个对象.现在我正在将我的NsmanagedObject转换为字典,将其存档并作为NSData发送.收到后,我正在取消归档.但我真的想通过归档和取消归档来转移NsmanagedObject本身,而不是创建一个中间数据对象.
@interface Test : NsmanagedObject<NSCoding>
@property (nonatomic,retain) NSString * title;
@end

@implementation Test
@dynamic title;

- (id)initWithCoder:(NSCoder *)coder {
    self = [super init];
    if (self) {
        self.title = [coder decodeObjectForKey:@"title"]; //<CRASH
    }
    return self;
}
- (void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeObject:self.title forKey:@"title"];
}
@end


NSData *archivedObjects = [NSKeyedArchiver archivedDataWithRootObject:testObj];
NSData *objectsData = archivedObjects;
if ([objectsData length] > 0) {
    NSArray *objects = [NSKeyedUnarchiver unarchiveObjectWithData:objectsData];
}

上面代码的问题是.它在initWithCoder中的self.title崩溃,说无法识别的选择器发送到实例.

>为什么标题不被识别为选择器.
>在initWithCoder中创建对象之前,unarchive应该以某种方式使用Nil托管对象上下文吗?
>我需要覆盖copyWithZone吗?

解决方法

下面的这个片段应该可以解决问题.主要的区别是调用super initWithEntity:inserTintoManagedObjectContext:
- (id)initWithCoder:(NSCoder *)aDecoder {
   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;
}

上面的代码片段只处理属性,没有关系.使用NSCoding处理NsmanagedObjectID之间的关系非常糟糕.如果您确实需要虑引入一个额外的属性以在解码时匹配两个(或许多)实体.

如何获得< YourContext>

(基于Sam Soffes现在不可用的帖子,代码来自https://gist.github.com/soffes/317794#file-ssmanagedobject-m)

+ (NsmanagedObjectContext *)mainContext {
     AppDelegate *appDelegate = [AppDelegate sharedAppDelegate];
return [appDelegate managedObjectContext];
}

注意:替换< YourContext>在mainContext的第一个片段中

大佬总结

以上是大佬教程为你收集整理的ios – NSManagedObject是否符合NSCoding全部内容,希望文章能够帮你解决ios – NSManagedObject是否符合NSCoding所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。