我正在尝试将Core Data添加到现有应用程序中,考虑到所有文档和每个教程都是从创建一个从一开始就使用核心数据的应用程序开始,这并不容易。所以我试图将现有的模型类转换为核心数据实体。这是我做的:
在我用于分配模型的ViewController中,我将其更改为
MyModel *model = (MyModel*)[NSEntityDescription insertNewObjectForEntityForName:@"MyModel"] inManagedObjectContext:[delegate managedObjectContext];
请注意,delegate是对我之前声明的app委托的引用。也许这不是明智的做法。
设置完所有属性后,我有:
[[delegate managedObjectContext] save:&error];
此行崩溃,并且回溯表示它位于[NSSqlLiteConnection execute]
内,保存功能内约8个级别。例外是:
*-[NSConcreteValue UTF8String]: unrecognized selector sent to instance*
这具体价值是什么?为什么这被称为谁?如果重要,我的模型创建/保存代码在一个函数内,这是一个NSNotification的回调。这是在一个单独的线程?我听说managedObjectContext不是线程安全的。但是我没有得到同样的错误。
答案 0 :(得分:2)
好吧,我很确定你的数据库模型(.xcdatamodel)上有一个声明为NSString的属性,它被声明为对象模型上的其他东西(可能是NSNumber)。编译代码时,不会生成任何警告,但是当CoreData尝试保存moc时(即:在持久性存储上写入数据,AKA是您的SQLite数据库),当CoreData尝试将您假设的NSString转换为UTF8编码时,它会失败。
您应该仔细检查数据库模型和对象模型上的属性。