【问题标题】:Saving custom class into Coredata将自定义类保存到 Coredata
【发布时间】:2013-04-24 16:57:27
【问题描述】:

您好,我使用了可转换的属性类型,并且我遵循了在其中一个论坛中存档的过程。

但它说

CoreData:警告:没有为实体“SurveyData”上的属性“survey”找到类名为“SurveyResults”的 NSValueTransformer 2013-04-30 09:44:16.022 TestReachability[11641:c07]-[SurveyApplication encodeWithCoder:]:无法识别的选择器发送到实例 0x845cb00 2013-04-30 09:44:16.023 TestReachability[11641:c07] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[SurveyApplication encodeWithCoder:]:无法识别的选择器发送到实例 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 对象是我的自定义类,我正在尝试创建一个对象,然后将其存储核心数据。请您帮帮我。

谢谢 迪拉杰

【问题讨论】:

  • 请出示调查类申请代码。

标签: ios core-data nsvaluetransformer


【解决方案1】:

使属性可转换是不够的,您还需要安排转换发生。你不能只告诉 Core Data 转换任何旧对象并期望它知道该做什么。您有两种选择:

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

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

【讨论】:

  • 非常感谢汤姆,想通了..你的答案非常清晰
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 2021-08-09
  • 2019-06-26
相关资源
最近更新 更多