2014-10-02 113 views
0

我有一个呈现对象的控制器,有些时候在显示此页面的过程中会删除一些对象。而如果我们尝试使用这个对象 - 所有的属性都是零。即使nsmangedobject已被删除,仍然保持活动状态

是否有办法使用复制NSMangedobject而不将他作为一个自由对象连接到真实的数据库。所以当原始对象被删除时,这个对象会稳定并充满数据?

感谢

回答

1

听起来好像你想为这个控制器创建一个新的NSManagedObjectContext。您需要在您可以访问原始上下文或其持久存储协调员的地方执行此操作。如果您通过故事板segue加载视图控制器,则可以在prepareForSegue:sender:中执行此操作。

控制器需要从这个上下文中加载它的对象。您无法传递您使用原始上下文获取的对象。相反,要求每个原始对象的objectID,并使用这些ID使用新的上下文创建新的托管对象。立即创建所有新对象并访问每个对象的持久属性(以便对对象进行无错操作)。新控制器必须对这些对象中的每一个保持强大的参考,因为上下文不一定保留它们。

只要您不将refreshObject:mergeChanges:mergeChangesFromContextDidSaveNotification:发送到控制器的私有上下文,所有对象应该保持有效并且它们的属性不应该改变。

+0

我有一个NSManagedObjectContext和数据库对象的所有请求都经过它,然后在我加载程序并保存它们之后,如何将它们传递给具有私有上下文的视图控制器? – 2014-10-03 07:08:59

+1

我已经更新了我的答案。 – 2014-10-03 13:35:06

+0

非常感谢您的配合,您绝对正确。 – 2014-10-04 18:39:47

-1

如果你只是想保持一个参考存活运行时,你只需设置一个强引用(例如@property (nonatomic, retain))。如果这还不够,你可以拨打[id<NSCopying> copy]

0

感觉就像你使用核心数据对象和某种tableview。使用nsfetchedresultscontroller,你会忘记同步问题。顺便说一句,保持某个地方managedObjects是不安全的。可能你可以复制并设置managedObjectContext属性为nil,使其与数据库分离,但这些对象将不是最新的。

相关问题