Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.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
Iphone iOS客户端:“;“缓存”;服务器端数据到持久存储_Iphone_Ios_Json_Core Data_Architecture - Fatal编程技术网

Iphone iOS客户端:“;“缓存”;服务器端数据到持久存储

Iphone iOS客户端:“;“缓存”;服务器端数据到持久存储,iphone,ios,json,core-data,architecture,Iphone,Ios,Json,Core Data,Architecture,我正在构建一个iOS客户端应用程序,以与现有的后端架构进行接口。为了减少延迟、API调用和有效负载,最好在客户端“缓存”模型数据,以便更快地索引,然后根据需要对客户端/服务器端进行相应的更新 当前的理论堆栈如下所示: Server Side >>>>>>>>>>>>>>>>> Client Side ----------------------------------------- PHP &g

我正在构建一个iOS客户端应用程序,以与现有的后端架构进行接口。为了减少延迟、API调用和有效负载,最好在客户端“缓存”模型数据,以便更快地索引,然后根据需要对客户端/服务器端进行相应的更新

当前的理论堆栈如下所示:

Server Side >>>>>>>>>>>>>>>>> Client Side
-----------------------------------------
PHP >> JSON >> CORE DATA >> UIKit Objects
注意:还值得注意的是,iOS客户端虽然本身在内部遵循MVC,但在更大的MVC客户机-服务器体系结构中本质上是一个“视图”。因此,就像用户操作后更新模型或模型更改后更新视图一样,服务器需要与客户端更改同步,客户端需要与服务器端更改同步

某些上下文:

A.许多不同的数据结构可能通过管道传输,必须动态地构建到
UIViews
中。很可能必须定义一个模式(除了记住可接受的对象结构是什么之外,我不确定是否有“最好的方法”来坚持
JSON
schema客户端)。我已经意识到需要将与创建自定义视图(“视图”模型)相关的模型数据与这些视图中显示的内容(“常规”模型)的模型数据分离开来

B.最终用户应能够立即CRUD(创建、读取、更新、销毁)这些视图中显示的大多数数据(但不能对视图本身进行CRUD)。他们以后可能需要在web界面或其他上下文中查看此内容

RestKit看起来是从API到JSON再到
COREDATA
的一个很好的候选者。我需要了解当需要将客户机模型副本推送到服务器时,它在结构上是否支持回调。也许最好的方法是在客户机模型中记录发生更改的时间,并通知任何基于RestKit的HTTP管理器将其传递给服务器

终极问题:
有人能谈谈这种体系结构的最佳实践、陷阱、技巧和框架吗?(特别是在性能和客户机与服务器之间的工作分配方面,但也非常感谢一般建议。)

我已经围绕这方面做了一些工作,希望能提供一些见解

关于A)是,如果您计划使用CoreData(或RestKit),您需要事先了解您的模式。否则,您将无法映射动态对象,除非您有一些通用对象类型,您只是在其中存储JSON字符串或其他内容,但这听起来不像您要做的,因为您提到用户正在编辑这些对象

B) RestKit将为您处理推送到服务器的操作,但我想您仍然需要对此进行一些控制。我们总是先在本地保存,然后在成功保存时向上推到服务器。这也使我们能够在没有网络的情况下工作。您只需处理服务器拒绝用户正在执行的更新/创建/删除时发生的边缘情况

C) RestKit很可能会让您实现80%的目标,就像它为我们所做的那样。只要了解REST端点和对象映射,并抽象HTTP请求,就会有很大的帮助。就系统理解更改而言,我们在托管对象上保留了一个标志,表明该对象是否需要同步。我们可以根据这些标志获取数据,并将服务器推上

RestKit的一点是,您可以在CoreData模型中拥有其他属性,这些属性不一定是JSON模式的一部分,但您可能需要在应用程序中使用。例如,我已经提到了知道对象是否需要同步的标志。我们还保留了用于搜索的预计算字段和一些其他随机信息,用于确定推送到服务器的对象顺序(依赖项)

希望这有帮助。如果你有更具体的问题,我可能会有更多的答案