Objective c iOS最佳实践可确保用户拥有最新的核心数据更新

Objective c iOS最佳实践可确保用户拥有最新的核心数据更新,objective-c,ios,core-data,nsfetchedresultscontroller,nsoperationqueue,Objective C,Ios,Core Data,Nsfetchedresultscontroller,Nsoperationqueue,对于一个简单的note应用程序,有一个带有fetchedResultsController的表视图控制器,该控制器在核心数据中有一个已保存注释的列表。用户可以单击+按钮添加新注释,也可以单击表视图中的一条记录编辑现有注释。在这两种情况下,都会显示带有文本视图的模态视图控制器 我想在用户键入每个字母时保存,因此在textViewDidChange中我正在更新核心数据。如果用户键入太快,核心数据将保存挂起。我最近添加了代码,将更新添加到NSOperationQueue,这是我的想法: 这在某种程度上

对于一个简单的note应用程序,有一个带有fetchedResultsController的表视图控制器,该控制器在核心数据中有一个已保存注释的列表。用户可以单击+按钮添加新注释,也可以单击表视图中的一条记录编辑现有注释。在这两种情况下,都会显示带有文本视图的模态视图控制器

我想在用户键入每个字母时保存,因此在textViewDidChange中我正在更新核心数据。如果用户键入太快,核心数据将保存挂起。我最近添加了代码,将更新添加到NSOperationQueue,这是我的想法:
这在某种程度上有所帮助

这是我需要帮助的问题。假设用户在textView中键入一个更新,然后按Done返回到table view控制器,然后在table view中刷新原始更新之前单击同一个注释以再次编辑注释。用户将看到一个包含旧数据的textView。更新不在那里。如果用户返回到表视图并再次编辑注释,则会显示最新更新


什么是要考虑的方法,或者我怎样才能解决这个问题?我希望textView始终显示最新更新,即使用户从textView和tableViewController来回切换的速度比用户应该的快;)

可以尝试在以下位置同时保存所有更改:

- (void)viewWillDisappear:(BOOL)animated
而不是一直保存为用户类型,这有点多余

如果用户转到其主屏幕,则将更改保存在

- (void)applicationDidEnterBackground

您不需要在用户每次添加字符时都保存上下文,只需要在用户完成添加注释时保存,或者至少在文本字段失去焦点时保存(第一响应者辞职)。他每次轻敲都这么做真的没有意义。保存上下文是一项非常昂贵的操作。

谢谢您的建议。最初,我只是在用户完成更新便笺后才保存,但是我希望保护用户不丢失任何未保存的更新,例如当用户正在键入便笺时电池耗尽。除了在添加每个字母后保存外,还有其他方法确保在设备断电时保存便笺吗?任何类似的事件都会从apps委托调用ApplicationWillDimit:或applicationWillTerminate:。在那里添加一个save应该可以解决您的问题。(在电池的情况下,applicationWillTerminate:会被调用,只要你的应用程序在前台,但由于用户只能在应用程序在前台时写便条,我想这符合你的需要)