【问题标题】:iOS best practices to guarantee user has most recent updates to core dataiOS 最佳实践确保用户拥有核心数据的最新更新
【发布时间】:2012-12-02 05:10:42
【问题描述】:

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

我想在用户键入每个字母时保存,所以在 textViewDidChange 中我正在更新核心数据。如果用户输入速度太快,核心数据会保存挂起。我最近添加了将更新添加到 NSOperationQueue 的代码,这是从这里获取的一个想法:
How to implement work queue in iOS where only newest request is handled?,这在一定程度上有所帮助。

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

有哪些方法可以考虑,或者我该如何尝试解决这个问题?我希望 textView 始终显示最新更新,即使用户从 textView 和 tableViewController 来回切换的速度比用户应该的要快;)

【问题讨论】:

    标签: objective-c ios core-data nsfetchedresultscontroller nsoperationqueue


    【解决方案1】:

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

    【讨论】:

    • 感谢您的想法。最初我只是在用户完成更新笔记后才保存,但是我想保护用户不会丢失任何未保存的更新,例如当用户正在输入笔记时电池没电了。除了在添加每个字母后保存之外,还有其他方法可以确保在设备断电时保存注释吗?
    • 任何类似的事件都会从应用程序委托中调用 applicationWillResign: 或 applicationWillTerminate:。在那里添加保存应该可以解决您的问题。 (在电池情况下,applicationWillTerminate: 顺便调用,只要你的应用在前台,但由于用户只能在应用处于前台时写便条,我想这适合你的需求)
    【解决方案2】:

    也许尝试一次保存所有更改:

    - (void)viewWillDisappear:(BOOL)animated
    

    而不是在用户键入时不断保存,这有点多余。

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

    - (void)applicationDidEnterBackground
    

    【讨论】:

      猜你喜欢
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      相关资源
      最近更新 更多