Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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 什么是最好的方式做移动&;服务器同步?_Iphone_Objective C_Optimization_Xml Parsing_Sync - Fatal编程技术网

Iphone 什么是最好的方式做移动&;服务器同步?

Iphone 什么是最好的方式做移动&;服务器同步?,iphone,objective-c,optimization,xml-parsing,sync,Iphone,Objective C,Optimization,Xml Parsing,Sync,我有一个应用程序涉及数据同步部分, 目前,我通过NSMutableURLRequest以XML的形式发送数据,并通过initWithContentsOfURL接收数据 但随着数据量越来越大,同步时间也在增加 如果有人知道如何更好地实现这一点,或者对上述实现进行了任何更改。这样同步时间就减少了 我想知道进行同步的最佳方法/模式。 Currently I am Following This method.. <ROOT> <ADD></ADD> <UPDAT

我有一个应用程序涉及数据同步部分, 目前,我通过NSMutableURLRequest以XML的形式发送数据,并通过initWithContentsOfURL接收数据

但随着数据量越来越大,同步时间也在增加

如果有人知道如何更好地实现这一点,或者对上述实现进行了任何更改。这样同步时间就减少了

我想知道进行同步的最佳方法/模式。

Currently I am Following This method..
<ROOT>
<ADD></ADD>
<UPDATE></UPDATE>
<DELETE></DELETE>
</ROOT>
目前我正在采用这种方法。。
我不是在问如何建立联系

在我的应用程序中,用户可以从iphone以及服务器网站添加、更新和删除。 我想知道如何以适当的方式同步数据(Xml中数据的适当结构)。因此,数据用户可以看到两侧都有条目。 提前感谢…

您可能需要查看。使用非常方便,性能非常好。您还可以使用内置的XML请求异步发送/接收XML数据,并根据需要进行处理

//Better and effective to use the asynchronous request to the server that will cost less time and even your UI will be remained active

NSLog(@"Server Path:%@",dataUrl);
//connection
NSURLConnection *theConnection;
NSMutableURLRequest *Request = [NSMutableURLRequest requestWithURL:dataUrl cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0]; 
[Request setHTTPMethod:methodName]; 
theConnection = [[NSURLConnection alloc] initWithRequest:Request delegate:self];
如果你对如何做某些事情有任何疑问,请随时提问

“分而治之”规则可以为几乎所有问题的解决提供思路:)

在这里,我将您的过程分为两个步骤。
1.正在下载数据。
2.正在分析数据以供使用或可能是持久性存储。 现在,如果你能同时做这两件事,你就能达到可能的速度。如果要使用“异步”连接(即
NSURLConnection
或任何第三方库),则可以执行这些操作。在
-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
(即,NSURLConnection的委托方法)中,您将接收一些数据块,以便异步解析它。通过这种方式,您只需将解析时间减少到几乎为零。对于异步解析,可以使用libXml库

这是一个苹果的示例代码。检查
LibXml
部分,它的操作与我前面解释的相同。简而言之,我的解释是:

您使用了“数据同步”这个词,所以我没有包括任何与UI概念相关的内容

更新
对于不知道如何与服务器同步的初学者。这里有一系列很棒的教程:

使用XML将大量数据传输到iOS设备时,您可能会遇到3个问题。首先是数据本身的大小。第二,一旦收到数据,您就有了处理时间。第三,你有连接的延迟(除非你控制两端,否则你几乎无能为力)。我将讨论这三个问题,但重点是数据的大小,因为这似乎是您遇到的问题

数据大小

如果大型数据集是你的问题,那么压缩就是你的朋友。一种我非常成功的方法是将数据压缩到内存中,然后对压缩后的数据进行base64编码,这样在传输过程中就不会出现奇数字符。我将其用于一般二进制数据以及特定的刚性数据格式。以下是相关代码段,您可以在使用此方法时看到它:

您可以反转此过程以将数据取回。这可以用于几乎任何数据类型,而不仅仅是XML,尽管压缩的好处越多,这对您的帮助就越大。文本可以很好地压缩——它非常适合XML

此外,您还可以更改数据格式。在多次使用XML之后,我转向了json,因为它通常更紧凑,更易于使用。XML擅长于通用解决方案,但如果您不需要严格通用的东西,那么它可能会有点过头。我最喜欢的科技笑话:XML就像暴力。如果它不能解决您的问题,则说明您没有充分利用它。=) 此外,它还可以在iOS上很好地支持json

最后,对于数据本身,请确保没有反复发送不必要的数据。设备缓存是您的朋友。尽可能将数据分解为可重用的部分。我知道这并不总是可能的,但它肯定会对大型数据集产生影响

处理时间

确保您使用仪器来分析您的通话,并且实际的数据传输是问题所在,一旦您获得数据,就不处理数据。乍一看你的大脑可能有点困难,但它的工作效率很高,而且速度也很快,还能很好地利用你的记忆。 此外,在许多小型操作中反复发送不需要的数据或将数据存储在磁盘上,而不是进行大型读取或写入,都会导致性能问题

延迟

通常,您无法控制此因素,但如果这是一个问题,则可以限制重复网络呼叫的数量,并在较少的网络呼叫中加载更多数据


最后,我写了一篇关于您可能感兴趣的技术方面的文章。

因为我没有得到我所期望的正确答案。我想我没能恰当地提出我的问题。 让我指定我当前的实现

1) 用户从应用程序中输入一些数据(此处表示每日日程的任务)

2) 网站提供了相同的功能

3) 当用户从应用程序输入任何任务时,他可以在门户上看到相同的任务(我进行后台同步)

4) 用户可以从两侧添加、编辑、删除任务

5) 我用以下方式处理添加、编辑和删除任务

I have Status Column in the table.  

 Status = 0 means task is sync on both side.
 Status = 1 means newly added task
 Status = 3 means user deleted the task which was on server.

   a)when user add any task I insert that task with Status = 1.
    When I sync the task I extract all the task with status = 1.
   Put the task in ADD tag.

   b)On server side task is added in the database and it again send back to app with unique primary id. (needed when user edit any task.) I insert that task to my table with status = 0.

   c)Now when user edit any task I first check the status of task, if its Status = 1,I keep the status as 1. but status is 0 i changed that status = 2.

   d)If user delete any task I check the status if its status = 1 I delete that task, if its 0 or 2 I changes its status to 3.

  Now when Sync Method is Called, I search through Table 
将所有任务放入状态为1的Add标记中

将所有任务置于状态为2的编辑标记中

将所有任务置于状态为3的删除标记中

现在在服务器端,这个Xml被解析,并根据标记插入、更新、删除

在服务器端采用我上面提到的相同方法,并添加 创建编辑删除xml。 我在应用程序端解析任务,执行插入、更新和删除操作
I have Status Column in the table.  

 Status = 0 means task is sync on both side.
 Status = 1 means newly added task
 Status = 3 means user deleted the task which was on server.

   a)when user add any task I insert that task with Status = 1.
    When I sync the task I extract all the task with status = 1.
   Put the task in ADD tag.

   b)On server side task is added in the database and it again send back to app with unique primary id. (needed when user edit any task.) I insert that task to my table with status = 0.

   c)Now when user edit any task I first check the status of task, if its Status = 1,I keep the status as 1. but status is 0 i changed that status = 2.

   d)If user delete any task I check the status if its status = 1 I delete that task, if its 0 or 2 I changes its status to 3.

  Now when Sync Method is Called, I search through Table