FTL*_*Guy 2 core-data ios swift
假设我有一个名为 CoreData 的实体类型Player
,它purpose
与一个名为PlayerPurpose
. 为了完整起见,假设我们有一个反比关系PlayerPurpose
叫parentPlayer
。考虑以下 swift 代码:
// Assume we already have a player object in a NSManagedObjectContext called context:
player.purpose = NSEntityDescription.insertNewObjectForEntityForName("PlayerPurpose",
inManagedObjectContext: context) as PlayerPurpose;
// Later in the code, we set the value to nil (or we could have replaced
// it with another call to insertNewObjectForEntityForName)
player.purpose = nil;
// What happens to the previous playerPurpose object within the Managed Object Context?
Run Code Online (Sandbox Code Playgroud)
我的问题:当数据中的唯一引用设置为 nil(或替换为另一个对象)时,托管对象上下文中的原始 playerPurpose 对象会发生什么情况?
这与关系删除规则并不真正相关,因为我没有明确删除任何对象——我是从任何有意义的关系中删除它,使其成为孤儿。
从 ARC 的角度来看(如果 PlayerPurpose 只是一个普通的非托管对象),原始 PlayerPurpose 实例现在没有引用,因此可以从内存中清除它——但是在托管对象上下文中会发生什么?CoreData 是否将其识别为孤立对象并通过上下文将其删除?
如果没有,那么我认为如果我要删除对它的所有引用,我必须小心删除通过上下文创建的任何托管对象。假设是这种情况,是否有一个很好的模式可以用来确保孤立对象从 NSManagedObjectContext 中清除并且它们不再存储在持久存储中?
谢谢!
在这种情况下,Core Data 不会自动删除对象,因为“孤立”是您的代码具有但 Core Data 无法识别的概念。没有理由PlayerPurpose
仅仅因为它的一个关系为零就删除一个对象。
确保PlayerPurpose
删除实例的最可靠方法是
NSManagedObject
为您的实体创建自定义子类(如果您还没有它们)。purpose
上的setter 方法Player
。如果新值为零,则删除旧值。您也可以通过确保deleteObject:
在适当的时间打电话来解决这个问题。或者您可以运行一个清理步骤,在该步骤中获取每个PlayerPurpose
值为 nil 的值parentPlayer
并删除它们。
归档时间: |
|
查看次数: |
819 次 |
最近记录: |