我在Xcode 8 beta 1中使用Core Data遇到困难。旧应用程序可以编译并正常运行,但是所有新应用程序都可以编译并运行良好,直到尝试插入新的NSManagedObject。
最初,我认为这与错误地删除旧的xcdatamodel并重新创建另一个模型有关,但是在制作了一个全新的应用程序并制作了一个简单的“A”实体之后,我无法在运行时创建A类的对象。
我尝试使用let a = A(context: myMOC)
返回错误:
尝试旧的let a = NSEntityDescription.insertNewObject(forEntityName: "A", into: context) as! A
返回错误:
我已经多次检查了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进行初始化。
最佳答案
我终于想通了:
在Xcode 7中,您必须输入类名称,然后在Swift中将模块设置为“当前项目模块”。我认为在Xcode 8中不再需要了,因为它会自动生成源文件。但是,您必须手动将类名称设置为生成的类的名称,以使Xcode生成@objc(ClassName)
(我不知道为什么它需要该注释-CoreData实体的手动创建类对我来说没有作用)。另外,您不必手动设置模块,因为否则Xcode将无法再找到生成的类。
关于ios - 核心数据模型似乎未反射(reflect)在应用程序中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37958821/