我正在尝试存储由VO(NameVO)和Core Data组成的NSMutableArray,但引发了以下异常:

'NSInvalidArgumentException', reason: '-[NameVO encodeWithCoder:]: unrecognized selector sent to instance 0x1096400a0'

我的NameVO只是一个简单的值对象,扩展了NSObject并包含两个字段,一个字符串和一个本身包含字符串的NSMutableArray。它还包含一个比较功能。

我正在尝试准备将其存储为CD可变属性类型(“名称”是我的NameVO数组):
NSData *tempNamesData = [NSKeyedArchiver archivedDataWithRootObject:names];

我的问题是:我该怎么做才能使NameVO被NSKeyedArchiver接受,以将其成功转换为NSData?

我不希望NameVO扩展NSManagedObject,因为那样我就不能直接实例化和初始化它。

最佳答案

如您的例外所述,您需要对类实现NSCoding协议,并且必须重写两个方法:

- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;

它应该对您的问题进行排序。

//扩展
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self) {
        _formId = [aDecoder decodeObjectForKey:@"FormID"];
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.formId forKey:@"FormID"];
}

关于ios - 使用核心数据存储自定义对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20539619/

10-09 02:18