此问题涉及iOS 9.3客户端应用程序与MS Azure后端上的Easy Table同步数据:
我在Azure上制作了一个移动应用。然后我下载其Objective-C启动项目。我正在查看MSSyncTable的头文件和文档。我试过了 插入,删除,更新和一些读取方法,它们都很有用。
通过文档,通常它们以MSSyncContext的数据源删除/添加/更新本地存储中的给定项目的方式工作。然后它将请求发送到移动服务发送删除/添加/更新。
我使用多个客户端对其进行了测试,结果都运行良好。
但是,我对用户直接在服务器上删除的情况会发生什么感兴趣。换句话说,假设我进入我的门户网站Easy Table并直接在Ricky' Ricky'像这样:
然后我拉我的客户端刷新。我在xCode的控制台中收到了这个错误日志:
- [QSTodoService logErrorIfNotNil:] - 错误错误Domain = com.Microsoft.MicrosoftAzureMobile.ErrorDomain Code = -1170"并非所有操作都成功完成" UserInfo = {NSLocalizedDescription =并非所有操作都成功完成,com.Microsoft.MicrosoftAzureMobile.ErrorPushResultKey =( "该项目不存在", "该项目不存在" )}
这是预期的,因为客户端应用程序正在尝试从服务器刷新数据Ricky。然而Ricky的数据并不存在,因为我刚删除它。
现在,情况是客户端应用的本地数据 Ricky 仍然存在。此外,刷新数据Ricky的请求始终在客户端的服务队列中。因此,从现在开始我所做的一切,都会给我这个错误,因为请求刷新数据Ricky"总是被发送,结果,"项目不存在"消息自然会一直回来。
所以我的问题是,有没有办法解决这个问题?
或者这种特殊用法是非法的,不应该这样做吗?
谢谢!
编辑:
我尝试使用MSSyncTable的forcePurgeWithCompletion方法清除所有本地数据,待处理操作等......正如doc指定的方法一样。
但是,方法给了我一个NSError:[Code = -1180"表格无法清除,因为它有已发送到服务器但尚未收到响应的待处理操作]
不确定,我将如何删除这些待处理的操作,以便我的forcePurgeWithCompletion可以正常工作。
答案 0 :(得分:1)
错误的原因是您尝试更新不再存在的记录。这会导致404 Not Found错误被捕获并在客户端上生成错误。
如果要删除记录,则应将行上的deleted
标志设置为true。然后将其传播到客户端,然后客户端删除记录。
如果进入此状态,则需要在本地存储上使用Purge
(或PurgeAsync)。这将从表和操作队列中删除数据,允许您从服务器重新同步数据。