gpt4 book ai didi

swift - 在 Swift Core Data 中向下转换 NSManagedObject

转载 作者:行者123 更新时间:2023-11-28 06:56:01 25 4
gpt4 key购买 nike

我有一个继承自 NSManagedObject 的类。我将此对象用于模型数据并且它也被持久化。

class Foo: NSManagedObject {

@NSManaged var firstVar: String
@NSManaged var secondVar: String

let entity = NSEntityDescription.entityForName("Foo", inManagedObjectContext: managedObjectContext)
let createdManagedObject = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedObjectContext) as? Foo

}

我可以创建对象并获取 NSManagedObject 实例,但我不能将其向下转换为实际类。实际上,如果我将它向下转换为可选值,那么我将得到 nil 值,如果我向下转换为展开,它就会崩溃。当使用 nil 值调试检查器显示类型:Module.Foo 时,我认为这是问题的根源。

当然,我尝试在 .xcmod​​el 检查器中命名类,尝试将 Entity 命名为 Module.Foo,但从 Xcode 7 开始,后者是不允许的无论如何。

总而言之:没有成功。现在我必须通过 KV 访问 Foo 对象,这有点尴尬。

有人解决过这个问题吗?

编辑:添加代码以显示创建和向下转换。我在 Xcode 7.0 上有问题,现在在 7.1.1 上也一样

最佳答案

看来主要问题是目标。感谢 Martin R 指出问题所在。问题是,主应用程序中的代码也是一部分或另一个目标,类似于测试。从 Core Data 中检索对象时,它的类签名是 Target.Foo,如果您尝试将其转换为 Target2 中的 Foo,您会得到从 Target.Foo 转换为 Target2.Foo 的错误消息是不可能的,不幸的是,除非日志为空,否则此消息不会显示在日志中?

如果在下面的设置中,您如何命名类或模块完全没有关系:

enter image description here

唯一重要的是您的 .xcmod​​el 与访问它的代码位于同一目标中。

关于swift - 在 Swift Core Data 中向下转换 NSManagedObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33626091/

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