Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 用于本地存储和显示服务器临时数据的核心数据-最佳设计是什么_Ios_Core Data_Storage - Fatal编程技术网

Ios 用于本地存储和显示服务器临时数据的核心数据-最佳设计是什么

Ios 用于本地存储和显示服务器临时数据的核心数据-最佳设计是什么,ios,core-data,storage,Ios,Core Data,Storage,我对核心数据还是新手,所以请原谅这个问题 我正在开发一个应用程序,让人们可以“挑战”自己和他人。我需要在本地存储用户已经接受的挑战,以便他可以脱机浏览他们的详细信息。但是,当应用程序在线时,我会请求服务器显示可用的挑战、已接受挑战的新细节等。因此需要一些同步,但我会尽量将其保持在最低限度 现在我的问题是如何构建数据。我应该: (1) 仅为存储在设备上的数据提供核心数据模型;然后只为从服务器解析的挑战构建模型类,并在我的表视图中显示一个挑战对象数组 (2) 两者都有一个单一的核心数据模型,但如何区

我对核心数据还是新手,所以请原谅这个问题

我正在开发一个应用程序,让人们可以“挑战”自己和他人。我需要在本地存储用户已经接受的挑战,以便他可以脱机浏览他们的详细信息。但是,当应用程序在线时,我会请求服务器显示可用的挑战、已接受挑战的新细节等。因此需要一些同步,但我会尽量将其保持在最低限度

现在我的问题是如何构建数据。我应该:

(1) 仅为存储在设备上的数据提供核心数据模型;然后只为从服务器解析的挑战构建模型类,并在我的表视图中显示一个挑战对象数组

(2) 两者都有一个单一的核心数据模型,但如何区分局部挑战和暂时挑战

(3) 是否有两个持久性存储,每种用途一个

选项2和3显然具有使用NSFetchedResultsController的优势,但编码和维护可能更复杂

至于同步问题,我应该:

(4) 保留上次更新每个本地挑战的时间戳,并将这些时间戳与服务器上的时间戳相匹配,以查看是否需要将新的详细信息推送到服务器

(5) 保存一组密钥路径和更改,然后在internet连接再次可用时将其推送到服务器

解决这两个问题的最佳方法是什么


非常感谢

因为这是一个设计问题,设计是一门艺术,从某种意义上说,总是有不止一种方法,所以我可能会这样做

我将创建一个模型来存储本地和可用的挑战,并通过一些属性来区分它们。当没有网络连接时,我可能会选择过滤掉所有远程挑战,而不显示缓存的(或您所说的暂时的)挑战。当连接恢复或同步发生时,我会检查是否需要在服务器或本地更新任何挑战

时间戳是检查实体修改时间的好方法。如果需要逐属性比较以解决冲突,可以使用校验和(如crc32或md5哈希)来加速二进制数据的比较(如果有的话)

即使使用时间戳,也可能触摸到对象,但保存的值实际上保持不变,因此校验和可用于检测是否对对象进行了实际更改。您可以使用NSKeyedArchiver将对象序列化为NSData并计算其校验和。我发现这种方法是可靠的。

可能重复