核心数据:"无法在此模型中找到名为...的实体"(仅限在设备上)

Bad*_*Cat 1 cocoa-touch core-data ios swift

核心数据有一个奇怪的问题......

我有一个模型,我将其他几个NSManagedObjects设置为另一个NSManagedObject(To One关系)的一部分.它在模拟器中运行良好,但是当我在设备上测试它崩溃时,给我这个错误:

2014-08-10 03:14:13.292 Prologue [4099:60b] *由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'+ entityForName:无法在此模型中找到名为'BookContents'的实体.*第一掷调用堆栈:(0x184ad3100 0x1914b01fc 0x1847f2f84 0x1000794ec 0x10007846c 0x100068250 0x10006adf0 0x10006ae54 0x187ad10b0 0x187ad1044 0x187aba520 0x187ad0a44 0x187ad06d8 0x187acb370 0x187a9cb50 0x187a9ac40 0x184a937f4 0x184a92b50 0x184a90de8 0x1849d1dd0 0x18a671c0c 0x187b02fc4 0x100072fd4 0x100073014 0x191aa3aa0)的libc ++ abi.dylib:与类型NSException的未捕获的异常终止

BookContents是一个与我的主数据模型对象Book有关的模型.这是创建它的代码:

func createBookModel() -> Book
{
    var book:Book = createFromEntity("Book") as Book;
    if (book != nil)
    {
        book.title = "New Book";
        book.bookContents = createFromEntity("BookContents") as BookContents;
        saveContext();
    }
    else
    {
        Log.error("Failed to create Book.");
    }
    return book;
}

func createFromEntity(entityName:String) -> NSManagedObject
{
    var obj:NSManagedObject = NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext: moc) as NSManagedObject;
    return obj;
}
Run Code Online (Sandbox Code Playgroud)

我不确定这里有什么问题,但因为它在emu上运行但在设备上没有运行,可能是其他错误(可能是数据模型文件?).但是实体命名在任何地方都是正确的,我将数据模型中的实体类作为项目模块名称的前缀.

Mar*_*rný 8

我们在数据模型中使用项目的模块名称前缀用于实体类时遇到了问题.相反,我们为NSManagedObjects的生成类添加了@objc(ClassName).

@objc(Book)
class Book: NSManagedObject {

    @NSManaged var ...

}
Run Code Online (Sandbox Code Playgroud)

您可能会尝试删除前缀并添加@objc(ClassName),如果它不能解决您的问题.