Ios NSManagedObjectContext子级/父级-子级未删除registeredObjects
我有两个NSManagedObject上下文,一个是临时上下文,另一个是主上下文。临时上下文的父上下文设置为主上下文。我在以下情况下使用它们:Ios NSManagedObjectContext子级/父级-子级未删除registeredObjects,ios,objective-c,core-data,nsmanagedobject,nsmanagedobjectcontext,Ios,Objective C,Core Data,Nsmanagedobject,Nsmanagedobjectcontext,我有两个NSManagedObject上下文,一个是临时上下文,另一个是主上下文。临时上下文的父上下文设置为主上下文。我在以下情况下使用它们: 当我创建一个“新”对象时,我使用临时上下文创建一个新对象。如果用户点击“取消”并决定不创建新对象,我只需从托管对象上下文中删除该对象并保存该上下文 如果用户保存这个新对象,我将保存临时上下文,然后保存主上下文以保存这些更改。我使用“performBlock”方法并链接保存,正如Apple和其他Stackoverflow帖子推荐的那样 如果我正在编辑现有
- 当我创建一个“新”对象时,我使用临时上下文创建一个新对象。如果用户点击“取消”并决定不创建新对象,我只需从托管对象上下文中删除该对象并保存该上下文
- 如果用户保存这个新对象,我将保存临时上下文,然后保存主上下文以保存这些更改。我使用“performBlock”方法并链接保存,正如Apple和其他Stackoverflow帖子推荐的那样
- 如果我正在编辑现有对象,则在编辑期间将其保留在主上下文中。如果用户点击“取消”,我将在主上下文上调用“回滚”,这将丢弃所有更改
编辑:在对临时上下文执行保存后,我还可以通过对临时上下文中的对象执行“refreshObject:object mergeChanges:NO”来修复此问题。这似乎是目前最好的解决方案(直到有人能解释为什么我需要这样做或为什么会发生这种情况)。我的猜测是对象相互引用,这导致对象无法释放。为什么要考虑注册对象的数量?注册对象只是上下文知道的对象列表。由于该上下文创建了这些对象,因此即使在保存之后,它也会自然地继续意识到这些对象。核心数据在保存后不会清除对象
告诉我它正在按预期工作。为什么要考虑注册对象的数量?注册对象只是上下文知道的对象列表。由于该上下文创建了这些对象,因此即使在保存之后,它也会自然地继续意识到这些对象。核心数据在保存后不会清除对象
向我读到它正在按预期工作。当您对MOC执行保存操作时,它会将对象保存到持久存储的父MOC。但对象仍将由MOC保留在内存中
默认情况下,托管对象与其上下文之间的引用较弱。此规则的例外情况是,托管对象上下文保持对任何更改(插入、删除和更新)对象的强引用,直到提交挂起的事务(使用save:)或丢弃(使用重置或回滚)
如果您觉得当前或将来不再需要此对象已满,或者生成了报警(在内存存储中动态),则在对MOC执行保存操作时,您希望通过使用“refreshObject:object mergeChanges:no”将所有内容转换为故障来修剪图形对象,它将对象保存到持久存储的父MOC。但对象仍将由MOC保留在内存中
默认情况下,托管对象与其上下文之间的引用较弱。此规则的例外情况是,托管对象上下文保持对任何更改(插入、删除和更新)对象的强引用,直到提交挂起的事务(使用save:)或丢弃(使用重置或回滚)
如果您觉得当前或将来不再需要此对象已满,或者生成了报警(在内存存储中动态生成),则希望通过使用“refreshObject:object mergeChanges:no”将所有内容转换为故障来修剪graph对象。请参见,我不确定这是否是预期的行为。让人觉得有问题的是,即使在对相关对象执行了“删除”操作之后,临时上下文仍在声明它在内存中有这些已注册的对象。是的,它将在以后的一段时间内保持这些对象的注册。除非您有特定的理由访问registeredObjects,否则它在日常操作中并没有多大价值。这有点像当年的-retainCount,听起来很有用,但最终对“我们”(非苹果开发者)没有价值。看,我不确定这是否是预期的行为。让人觉得有问题的是,即使在对相关对象执行了“删除”操作之后,临时上下文仍在声明它在内存中有这些已注册的对象。是的,它将在以后的一段时间内保持这些对象的注册。除非您有特定的理由访问registeredObjects,否则它在日常操作中并没有多大价值。这有点像当年的-retainCount,听起来很有用,但最终对“我们”(非苹果开发者)没有价值。似乎执行“refreshObject”或“refreshAllObjects”不会对我的应用程序造成任何负面影响。一次