将自定义类保存到Coredata中

您好,我已经使用属性types可转换,我已经遵循论坛的其中一个归档的程序。

但它说

CoreData:警告:没有在实体“SurveyData”上find类名为“SurveyResults”的属性“survey”的NSValueTransformer 2013-04-30 09:44:16.022 TestReachability [11641:c07] – [SurveyApplication encodeWithCoder:]:无法识别的select器已发送实例0x845cb00 2013-04-30 09:44:16.023 TestReachability [11641:c07] *由于未捕获的exception'NSInvalidArgumentException',原因:' – [SurveyApplication encodeWithCoder:]:无法识别的select器发送到实例0x845cb00'

这是我的代码

SurveyApplication *survey =[[SurveyApplication alloc]init]; survey.name=@"dheeraj"; survey.phone=@"573-356-2598"; NSManagedObject *aStory = [NSEntityDescription insertNewObjectForEntityForName:@"SurveyData"inManagedObjectContext:self.managedObjectContext]; [aStory setValue:survey forKey:@"survey"]; NSError *saveError = [[NSError alloc]init]; if (![self.managedObjectContext save:&saveError]) { NSLog(@"%@",saveError); } 

SurveyAppplication对象是我的自定义类,并试图创build一个对象,然后存储它的核心数据。请你帮我。

谢谢Dheeraj

使属性转化是不够的,还需要安排转换发生。 你不能只是告诉核心数据转换任何旧的对象,并期望它知道该怎么做。 你有几个select:

  1. 不要告诉核心数据如何转换数据。 在这种情况下,核心数据将尝试调用encodeWithCoder:在您的对象将其转换为NSData 。 这就是为什么你会得到提到这个方法的错误 – 它试图调用你的类的方法,但是这个方法不存在。 在这种情况下, 您的类必须符合NSCoding才能进行转换。

  2. 告诉核心数据如何转换数据。 在这种情况下,您将创build执行转换的NSValueTransformer的子类。 您可以在核心数据模型编辑器或代码中的属性上对其进行configuration。 在这种情况下, 您必须拥有一个知道如何执行转换的自定义转换器类