insertNewObjectForEntityForName 找不到实体 (Swift)
Posted
技术标签:
【中文标题】insertNewObjectForEntityForName 找不到实体 (Swift)【英文标题】:insertNewObjectForEntityForName could not locate entity (Swift) 【发布时间】:2014-06-11 10:29:28 【问题描述】:我正在尝试将工作中的 CoreData 应用程序移植到 Swift。此代码失败:
let moc = self.context
NSLog("Entities: \(moc.persistentStoreCoordinator.managedObjectModel.entitiesByName.allKeys)")
let obj = NSEntityDescription.insertNewObjectForEntityForName("School",
inManagedObjectContext:moc)
NSLog
的输出是这样的:
2014-06-11 11:23:51.634 WYBData[18480:303] Entities [Address, Contact, Hospital, Person, Place, School]
因此,即使日志显示有一个名为 School
的实体,我认为这意味着 NSManagedObjectContext
已正确设置,但我仍然收到此错误:
2014-06-11 11:23:55.338 WYBData[18480:303] +entityForName: could not locate an entity named 'School' in this model.
2014-06-11 11:23:55.340 WYBData[18480:303] (
0 CoreFoundation 0x00007fff8c05725c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x00007fff8f274e75 objc_exception_throw + 43
2 CoreData 0x00007fff89b20a19 +[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:] + 201
3 WYBData 0x00000001000171f3 _TFC7WYBData12WYBXmlParser7executefS0_FRGSqCSo7NSError_Sb + 2403
4 WYBData 0x000000010000ea4a _TFC7WYBData11WYBMainView2gofS0_FPSs9AnyObject_T_ + 1642
5 WYBData 0x000000010000ead2 _TToFC7WYBData11WYBMainView2gofS0_FPSs9AnyObject_T_ + 66
6 AppKit 0x00007fff91d97260 -[NSApplication sendAction:to:from:] + 327
7 AppKit 0x00007fff91d970de -[NSControl sendAction:to:] + 86
8 AppKit 0x00007fff91de3c4d -[NSCell _sendActionFrom:] + 128
9 AppKit 0x00007fff91dfd655 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2316
10 AppKit 0x00007fff91dfca27 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 487
11 AppKit 0x00007fff91dfc13d -[NSControl mouseDown:] + 706
12 AppKit 0x00007fff91d7da58 -[NSWindow sendEvent:] + 11296
13 AppKit 0x00007fff91d1c5d4 -[NSApplication sendEvent:] + 2021
14 AppKit 0x00007fff91b6ca19 -[NSApplication run] + 646
15 AppKit 0x00007fff91b577a3 NSApplicationMain + 940
16 WYBData 0x000000010000a9ed top_level_code + 109
17 WYBData 0x000000010000aa2a main + 42
18 libdyld.dylib 0x00007fff8bf085fd start + 1
19 ??? 0x0000000000000003 0x0 + 3
)
我可以正确地创建一个Address
实体,但不能正确创建其他实体。即使这很奇怪,因为Address
是Contact
的子实体,但尝试创建Contact
会导致上述相同的错误。
我错过了什么?
编辑:
我暂时从我的核心数据模型中删除了Address
,现在可以创建Contact
,但没有别的了。所以似乎我只能创建模型中定义的第一个实体(按字母顺序)。这听起来像是一个错误,还是我的NSManagedObjectModel
会以某种方式损坏?
【问题讨论】:
当你使用 println() 代替 NSLog() 会发生什么? 感谢@Areal-17,我得到了与 NSLog() 完全相同的输出 【参考方案1】:对于遇到同样问题的其他人:问题是我的.xcdatamodeld
文件。它一定是以某种方式损坏了,因为我创建了一个新文件并准确地重新创建了我的数据模型,现在它可以工作了。我看不出这两个文件之间有任何区别(至少在 Xcode Core Data 模型编辑器中)。
我的数据模型在 ios 和 OS-X 项目之间共享(OS-X 应用程序为 iOS 应用程序准备数据)。我想知道为 iOS 创建的 .xcdatamodeld
文件与 OS-X 相比是否有任何不同。
【讨论】:
我也有同样的问题。我快速浏览了模型文件的文件格式。第一眼看不出有什么区别。重新创建文件时是否更改了其他内容? @WizardofKneup 我试图准确地重新创建模型文件。我只是在内容上使用 diff 进行了仔细检查。 XML 中的某些属性的顺序不同(使差异更难检查!),但我能看到的唯一明显区别是我无意中将小数更改为双精度,并且在新版本中我标记的更少属性作为可选。没有明显的区别会导致错误。 我也有同样的问题。这肯定是 XCode/CoreData 中的一个错误。您是否向 Apple 报告了此问题? @WizardofKneup 这是一个旧线程,但我遇到了类似的问题,显然 .xcdatamodeld 包中存在 .xccurrentversion 导致了“损坏”。以上是关于insertNewObjectForEntityForName 找不到实体 (Swift)的主要内容,如果未能解决你的问题,请参考以下文章