核心数据模型似乎没有反映在应用程序中

jja*_*tie 9 core-data ios swift xcode8

我在Xcode 8 beta 1中遇到了Core Data的困难.旧的应用程序将编译并运行良好,但所有新应用程序编译并运行正常,直到尝试插入新的NSManagedObject.

最初我认为它与错误地删除旧的xcdatamodel并重新构建另一个有关,但在制作一个全新的应用程序并制作一个简单的实体"A"之后,我无法在运行时创建类A的对象.

我试过使用let a = A(context: myMOC)哪个返回错误:

类"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>
Run Code Online (Sandbox Code Playgroud)

更新2:打印managedObjectModel的实体,显示正在加载正确的模型.我仍然无法在任何新项目中初始化NSManagedObject.

car*_*ath 14

我终于想通了:

在Xcode 7中,您必须输入类名,并在Swift中将模块设置为"当前项目模块".我认为在Xcode 8中不再需要,因为它会自动生成源文件.你必须手动将类名设置为生成的类的名称,以使Xcode生成@objc(ClassName)(我不知道它为什么需要该注释 - 手动创建的CoreData实体类在没有它的情况下工作).此外,您不必手动设置模块,否则Xcode将无法再找到生成的类.

在此输入图像描述

  • 我有同样的问题`***终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:'类'MyAp.MyClass'的NSManagedObject必须有一个有效的NSEntityDescription.'`我不得不添加`@objc(MyClass) `到我的管理对象类的顶部. (5认同)