【问题标题】:Design assistance for MVC and KVOMVC 和 KVO 的设计协助
【发布时间】:2012-11-06 17:18:30
【问题描述】:

我的设备上保留了需要与我的服务器同步的数据,就设计而言,我是否走在正确的轨道上?

我有一个带有返回本地对象方法的模型,我们称之为[model objects]';

在此方法中,它会立即返回本地对象,但我还想检查服务器是否需要更新这些对象中的任何一个,因此在后台线程中我运行一个使用 async NSUrlConnection 的方法,该方法将返回 JSON每个需要更新的对象,我会将其保存到核心数据中。在 Table View Controller 中,我会设置一个 KVO 来观察 updatedObjects 的值何时发生变化,然后重新加载 objectTableView 中显示的对象。

问题:这是处理这个问题的正确方法吗?我错过了什么吗?我能以某种方式改进吗?

我还考虑禁用正在更新的对象的 UITableViewCells,并在下载和保存阶段显示UIActivityIndicator,但我不确定这是否会导致 UX 出现任何竞争条件。

希望这已经解释得足以让您理解,如果您有任何问题我会立即回复。

【问题讨论】:

    标签: ios performance model-view-controller key-value-observing


    【解决方案1】:

    CoreData 支持此类问题。并且有多种方法。

    基本要点是您在后台线程中为异步 Web 调用创建一个新上下文,然后将您的本地数据与您管理更新的新接收数据进行比较。然后执行从线程上下文到主上下文的合并。此时您可以在CoreData中收到更新数据的通知并更新您的视图。

    您甚至可以使用NSFetchedResultsController 来进一步简化此操作。

    【讨论】:

    • 嗯,这似乎是我打算做的事情,如果我做不同的事情,请纠正我。目前,我正计划将 CoreData 中的对象保存在后台线程(在新的 MOC 中),然后在任何值发生更改时与默认 MOC 合并。然后在我的完成块上设置updatedObjects 的数据,VC 上的观察者将收到该通知并更新用户界面。
    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多