2010-06-27 79 views
2

我正在使用nsfetchedresultscontroller从coredata的数据使用tableview。当视图加载我做一个新的实体使用tableview coredata临时对象

SomeManagedObject *someManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"SomeManagedObject" inManagedObjectContext:self.managedObjectContext]; 

这样新的实体出现在我的tableview。现在我希望这个实体只是临时的,但是当我在tableview中编辑一些对象并保存managedObjectContext时,临时实体也会被保存,而我不想那样做。

是他们只保存一个对象的方法,而不是de managedObjectContext中的所有东西?

是他们的一些其他方式来为我的tableview做一个临时对象。

任何帮助将是非常受欢迎的。 谢谢 吨

+0

您可以将一个无上下文传递给initWithEntity:insertIntoManagedObjectContext。看到这个问题:http://stackoverflow.com/questions/3256195/how-to-deal-with-temporary-nsmanagedobject-instances – Symmetric 2012-09-26 02:27:52

回答

0

不,在managedObjectContext保存是一个全部或没有。我不知道的是,如果你设置了管理对象的持久性存储零

- (void)assignObject:(id)object toPersistentStore:(NSPersistentStore *)store 

如果然后保存managedObjectContext这个对象不应该保存会发生什么。这只是一个猜测,但告诉我它是否有效;-)

+0

没有。这是行不通的。我想它会在使用nil时将对象分配给默认存储。 – Ton 2010-06-27 22:11:28

0

对于临时管理对象,使用第二个管理对象上下文(MOC)创建它们。完成后,只需释放MOC而不执行保存。

看看CoreDataBooks中的添加书本代码,它使用相同的方法在用户取消时丢弃新添加的对象。

+0

不要创建单独的上下文。这是非常浪费和昂贵的。如果对象必须是临时的,则使用-init创建它,并且不要传入任何上下文。 – 2010-08-07 23:49:58

+0

同意Marcus,这是我的做法,我使用基类来处理递归插入到有效的上下文中... http://www.locassa.com/index.php/2011/05/temporary- storage-in-apples-coredata/ – 2011-05-22 22:49:42

+0

@ MarcusS.Zarra,你还不建议为临时(可能被抛弃)的对象创建一个单独的上下文吗?它在2014年仍然有效吗?提前致谢。 – 2014-03-24 15:50:35

2

创建新的NSManagedObject与它的alloc init并传递nil而不是NSManagedObjectContext。然后,如果您稍后决定要将该对象设为永久性,请将其设置为上下文。但是,这不会让你在NSFetchedResultsController中看到它,因为它不会与上下文关联。

如果您能解释您的最终目标是什么,那么可以提供更好的答案。

+0

这将在@dynamic属性上失败。 initWithEntity的文档:insertIntoManagedObjectContext说:“重要说明:此方法是NSManagedObject的指定初始化程序,您不能简单地通过发送init来初始化管理对象。” – Symmetric 2012-09-26 02:29:23

+0

您的评论没有意义。我的答案特定状态传递给NSManagedObjectContext nil。没有暗示''-init'将被调用。 – 2012-09-26 06:12:52

+0

好的,对不起。我读了上面的“alloc init”作为一个简单的init,而不是initWithEntity。在任何情况下,你对这个问题的答案使得它更加清晰,谢谢:http://stackoverflow.com/questions/3256195/how-to-deal-with-temporary-nsmanagedobject-instances – Symmetric 2012-09-26 16:11:25