gpt4 book ai didi

ios - 在 Xcode 7.3 中使用 Swift 实例化核心数据托管对象

转载 作者:行者123 更新时间:2023-11-30 13:27:55 24 4
gpt4 key购买 nike

在 Xcode 7.3 中将 Core Data 与 Swift 结合使用时,我遇到了一个奇怪的错误。

我最近将代码库从 Swift 1.0 更新到了 Swift 2.2,现在在尝试访问 NSManagedObject 扩展的某些元素时遇到错误。

我已经在数据模型中设置了实体(此处称为“成员”),如下所示,其类名和模块与我在其他帖子中看到的相匹配:

Screenshot of Inspector View of Member Entity

该类本身具有以下最顶层声明:

@objc(成员(member))类成员:NSManagedObject {

我已经尝试删除和添加顶部的 @objc 部分,因为我看到人们提到它可能会导致问题。

我通过 NSManagedObject 扩展中的方便初始化程序实例化 NSManagedObjects 的实例,如下所示:

convenience init(context: NSManagedObjectContext, className: String) {
let entity = NSEntityDescription.entityForName(className, inManagedObjectContext: context)
self.init(entity: entity!, insertIntoManagedObjectContext: context)
}

最后,当我尝试在 Member 对象上设置某些属性时,发生了错误。我认为这可能与属性是否可选有关,但切换这些属性似乎没有效果。

我得到的错误是 EXEC_BAD_ACCESS 错误,但它似乎源于我实例化 Member 对象时打印出的以下内容:

MyAppName[23325:891360] CoreData: warning: Unable to load class named 
'MyAppName.Optional("Member")' for entity 'Member'. Class not found,
using default NSManagedObject instead.

任何见解将不胜感激,因为我不确定还可以尝试什么,以及为什么要在类名的开头添加“.Optional”。

谢谢。

最佳答案

不要强制解开从 NSEntityDescription.entityForName 返回的可选内容。您可能应该在实体上放置一个守卫,并在实体不返回时抛出。

顺便说一句,我怀疑这种便捷方法是否能比调用 NSEntityDescription.insertNewObjectForEntityForName(_:inManagedObjectContext:) 带来什么好处。您仍在处理神奇的字符串和上下文。

关于ios - 在 Xcode 7.3 中使用 Swift 实例化核心数据托管对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36923043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com