我在 Xcode 8 beta 1 中使用 Core Data 时遇到了困难。旧应用程序可以正常编译和运行,但所有新应用程序都可以正常编译和运行,直到尝试插入新的 NSManagedObject。
最初我认为这与错误地删除旧的 xcdatamodel 并重新制作另一个有关,但是在制作了一个全新的应用程序并制作了一个简单的实体“A”之后,我无法在运行时创建 A 类的对象。
我试过使用let a = A(context: myMOC)
which 返回错误:
类“MyApp.A”的 NSManagedObject 必须具有有效的 NSEntityDescription。
尝试旧的let a = NSEntityDescription.insertNewObject(forEntityName: "A", into: context) as! A
返回错误:
无法将“NSManagedObject_A_”(0x7fd114626f80)类型的值转换为“MyApp.A”(0x10d2fdf28)。
我检查了我的 xcdatamodel 十几次以确保我拼写正确,并创建了一个新项目进行测试以确保我在设置 CD 时没有犯任何错误。想法?
更新: xcdatamodel 包内容是这样的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="11147.23" systemVersion="16A201w" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
<entity name="Coordinate" syncable="YES" codeGenerationType="class">
<attribute name="latitude" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="YES" syncable="YES"/>
<attribute name="longitude" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="YES" syncable="YES"/>
<relationship name="route" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Route" inverseName="coordinates" inverseEntity="Route" syncable="YES"/>
</entity>
<entity name="Route" syncable="YES" codeGenerationType="class">
<attribute name="uuid" optional="YES" attributeType="String" syncable="YES"/>
<relationship name="coordinates" optional="YES" toMany="YES" deletionRule="Nullify" ordered="YES" destinationEntity="Coordinate" inverseName="route" inverseEntity="Coordinate" syncable="YES"/>
</entity>
<elements>
<element name="Route" positionX="-45" positionY="0" width="128" height="75"/>
<element name="Coordinate" positionX="-18" positionY="27" width="128" height="90"/>
</elements>
</model>
更新 2:打印 managedObjectModel 的实体,表明正在加载正确的模型。我仍然无法在任何新项目中初始化 NSManagedObject。