NSManagedObjectCont-6ren">
gpt4 book ai didi

ios - 一对一关系的值类型 Not Acceptable : property = "user"; desired type = User; given type = User;

转载 作者:IT王子 更新时间:2023-10-29 05:43:38 29 4
gpt4 key购买 nike

我的核心数据有线问题。使用 iOS 10 中的 Swift3,每次使用

获取或存储数据时,我都会获得托管对象上下文
 func getContext () -> NSManagedObjectContext {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
return appDelegate.persistentContainer.viewContext
}

在我的应用程序中,我有两个实体“用户”和“分类帐”。我想给一个用户分配一个账本,但是一个用户可以有多个账本。因此,我有一个可以显示用户的 UserTableView 和一个可以创建用户的 UserViewController 类。我对分类帐也有同样的看法。在创建分类账时,我还会得到一个所有用户的列表,我从中选择一个,哪些应该分配给分类账,反之亦然。

如前所述保存时出现错误

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unacceptable type of value for to-one relationship: property = "user"; desired type = User; given type = User;

我的数据模型如下所示: Data Model

非常感谢任何帮助:)

最佳答案

我遇到了同样的问题。就我而言,这是在我运行单元测试时发生的。在那种情况下,内存中同时有两个核心数据堆栈,一个用于应用程序工具,另一个用于我正在运行的单元测试。

解决此问题的第一个线索是在设置关系属性之前放置一个断言,以确保我设置的对象的实体类型与关系的预期实体类型相同。它们应该是相同的,但在我的例子中它们不是。

在我的例子中,我有一个 MatchRequest,它与名为“initiator”的 Player 具有一对一的关系。所以我的断言如下所示:

    let player = try Player.findLocal(for: matchRequest.initiator, in: moc, createIfMissing: true)
let expectedEntity = self.entity.relationshipsByName["initiator"]!.destinationEntity!
assert(player!.entity === expectedEntity, "Player returned doesn't have the same entity type")
self.initiator = player

上述断言失败,我怀疑这与 Core Data 使用的导致参数异常的断言类似。

检查 Player.entity() 时,它会返回导致失败的同一实体实例。

我认为问题的根源在于 Core Data 正在为实体设置一些静态属性,这些属性将在核心数据堆栈之间错误共享。从一个堆栈而非另一个堆栈调用时,调用 MyManagedObject.entity() 将正常工作。

因此,为了解决这个问题,当我创建要放入关系中的 Player 对象时,我使用旧的 NSEntityDescription.insertNewObject(...) API 获取实体,而不是较新的 MyManagedObject(context:) 构造函数。这可确保将正确的实体用于给定的托管对象上下文。

所以,回顾一下:

// SOMETIMES FAILS if you have more than one core data stack:
result = Player(context: managedObjectContext)

// ALWAYS WORKS:
result = NSEntityDescription.insertNewObject(forEntityName: "Player", into: managedObjectContext) as? Player

关于ios - 一对一关系的值类型 Not Acceptable : property = "user"; desired type = User; given type = User;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40597981/

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