【问题标题】:EXC_BAD_ACCESS when calling new entity() method in iOS 10 / macOS Sierra Core Data在 iOS 10 / macOS Sierra Core Data 中调用 new entity() 方法时的 EXC_BAD_ACCESS
【发布时间】:2016-06-19 16:27:15
【问题描述】:

新的entity() 方法帮助我们避免使用魔法字符串。与其说managedObjectModel.entitiesByName["foo"],不如说Foo.entity()

问题是在我的测试中它总是抛出EXC_BAD_ACCESS。我已经配置了我的 NSPersistentStore 并运行了一个测试查询以确保一切设置正确。

有什么见解吗?调用此方法的先决条件是什么?

【问题讨论】:

    标签: swift core-data swift3


    【解决方案1】:

    您的设置有问题。

    要检查,打开 Xcode,启动一个新项目,选择“Master/Detail”,检查“Core Data”。在MasterViewController 中,在任意位置插入这一行:

    print("The entity is ", Event.entity(), ".")
    

    您会看到它开箱即用。请注意,在模型编辑器中,当检查Event 实体时,选项“Codegen”设置为“Class Definition”。

    【讨论】:

    • 原来我的设置没有问题。我的回答总结了我遇到的困难以及如何解决它,尽管它对我来说像是一个错误。
    【解决方案2】:

    问题原来是仅仅初始化NSPersistentStore 并调用loadPersistentStores 是不够的。您必须至少显式或隐式使用其managedObjectModel 属性一次,这很可能是由于延迟加载。

    我暂时认为这是一个错误。 entity() 方法可能应该在后台自行执行此操作,但可能还有其他考虑因素。

    【讨论】:

    • 有趣。考虑到 Core Data 过去的工作方式,这并不完全令人惊讶。但是这种新方法应该 (a) 仅通过其他一些更改来工作,或者 (b) 如果 (a) 不可能,则给出有意义的错误消息。我也认为这是一个错误。
    猜你喜欢
    • 1970-01-01
    • 2017-02-16
    • 2012-04-14
    • 1970-01-01
    • 2017-02-04
    • 2011-05-08
    • 2017-03-13
    • 2017-06-16
    • 2017-05-05
    相关资源
    最近更新 更多