【问题标题】:tableview coredata temporary objecttableview coredata 临时对象
【发布时间】:2011-03-08 21:46:48
【问题描述】:

我使用 nsfetchedresultscontroller 使用带有 coredata 数据的 tableview。当视图加载时,我使用

创建一个新实体
SomeManagedObject *someManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"SomeManagedObject" inManagedObjectContext:self.managedObjectContext];

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

他们是一种只保存一个对象而不是 de managedObjectContext 中的所有内容的方法吗?

他们是否有其他方式为我的 tableview 制作临时对象。

非常欢迎任何帮助。 谢谢 吨

【问题讨论】:

标签: iphone uitableview nsmanagedobject core-data


【解决方案1】:

使用 alloc init 创建新的 NSManagedObject 并传递 nil 而不是 NSManagedObjectContext。然后,如果您以后决定希望该对象是永久的,则将其设置为上下文。但是,这将不允许您在 NSFetchedResultsController 中看到它,因为它不会与上下文相关联。

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

【讨论】:

  • 这将在@dynamic 属性上失败。 initWithEntity:insertIntoManagedObjectContext 的文档说“重要此方法是 NSManagedObject 的指定初始化程序。您不能简单地通过发送 init 来初始化托管对象。”
  • 您的评论没有意义。我的回答特定状态为 NSManagedObjectContext 传入 nil。没有暗示要调用裸露的-init
  • 好的,抱歉。我将上面的“alloc init”读为一个裸初始化,而不是 initWithEntity。无论如何,您对其他问题的回答更清楚,谢谢:stackoverflow.com/questions/3256195/…
【解决方案2】:

不,在 managedObjectContext 中保存是全有或全无。我不知道如果将托管对象的持久存储设置为 nil 会发生什么

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

如果您随后保存 managedObjectContext,则不应保存此对象。这只是一个猜测,但请告诉我它是否有效;-)

【讨论】:

  • 不。这行不通。我猜它会在使用 nil 时将对象分配给默认存储。
【解决方案3】:

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

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

【讨论】:

  • 不要创建单独的上下文。这是极其浪费和昂贵的。如果对象必须是临时对象,请使用 -init 创建它,并且根本不传递上下文。
  • 同意 Marcus,我就是这样做的,我使用基类来处理递归插入到有效上下文中...locassa.com/index.php/2011/05/…
  • @MarcusS.Zarra,您仍然不建议为临时(可能被丢弃的)对象创建单独的上下文吗? 2014年还有效吗?提前致谢。
  • 不,NSManagedObjectContext 的创建成本降低了很多,而且很容易创建。我仍然不喜欢为了扔掉而创造倍数,但现在便宜多了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多