2

这是我正在谈论的示例:

以 iOS 版 Twitter 为例。每当您发布推文时,该推文都会发送到数据库,然后它也会作为推文列表的一部分显示在您的设备上。

仅发送一条推文后,您在设备上看到的推文列表如何更新?以下是我想到的一些可能的方法,但我要求的是哪一种是最好的方法:

  • 发送推文后,从远程 Twitter 服务器重新下载最近推文的整个列表(我非常怀疑这一点,因为这将花费相对较长的时间,而实际上它只是将一条推文附加到显示的推文数组中)
  • 保存推文对象的本地数组与数据库分开更新(例如,它更新数据库,然后使用您发送到数据库的相同数据更新其数组,并且永远不会下载您刚刚发送的推文,因为您没有不需要,因为您已经在本地拥有它,因为您编写了它)
  • Core Data 是否能够在一个(或相对较少的)步骤中更新远程数据服务器和阵列?(对不起,如果这是显而易见的答案,并且听起来我没有研究它,但我确实阅读了有关 Core Data 并开始了一个教程。只是内容太多以至于我需要一整天的时间或两个只是为了弄清楚它是否适合我的应用程序)
  • 有没有另一种方法来管理这个?

此外,如果它是上述后两个想法之一,您是否能够通过仅更新本地数组并从该数组重新加载单元格而不从数据库加载您的一条推文来更新表格视图单元格?我只是好奇什么是最有效的方法。

再次重申,我的主要问题是:当您进行微小的单个更新(例如发送推文)时,如何使发送到远程数据库的数据和本地数据(存储在可变数组中)保持同步而无需重新加载数据库中的所有数据(当有其他内容[即其他推文])已经加载。

(我知道除了 Twitter 开发人员之外,没有人确切知道 Twitter 是如何完成的,但我只是使用这个 Twitter 功能作为示例。同样的概念可以应用于任何类似的应用程序。)

(另外,这是一个关于数据流的概念性问题,所以我不需要看任何代码,但建议使用不同的技术,如 Core Data,或者只是更新一个数组。)

(我一直在研究这个,以及所有不同的方法,它变得非常耗时,所以我想问问你们有经验的人。此外,这可以帮助其他有类似问题的人。)

(对不起,如果看起来我在问一堆问题,但我基本上是以不同的方式问同一个问题,并提供可能的解决方案。)

任何见解表示赞赏!

4

2 回答 2

2

像推文这样的不可变消息实际上很容易处理——服务器端和你的应用程序。

当您从客户端向服务器发送推文时,您还会更新您的“主上下文”(请参阅​​“托管对象上下文”),这反过来会向您的控制器发送通知(请参阅NSFetchedResultsController哪个会根据您所在的本地模型更新您的表格视图在托管对象上下文中。

从服务器更新只是将本地推文与同时添加的新推文合并。

由于没有可变的推文,同步真的没什么大不了的。正如评论中提到的,如果有可变推文(或任何类型的消息),同步将变得更加复杂。

Core Data 不会自动更新远程服务器。但是有一些解决方案可以通过 Core Data “查看”远程数据库 - 请参阅 NSIncrementalStore 和相关的第三方库 (AFIncrementalStore)。

于 2013-07-26T20:27:21.100 回答
1

这是可笑的微不足道。您更新本地数据库并同时发送远程更新。

您使用远程响应将本地记录标记为已同步或稍后再次尝试更新。

于 2013-07-26T20:10:42.603 回答