SaveEventually 离线行为

Posted

技术标签:

【中文标题】SaveEventually 离线行为【英文标题】:SaveEventually offline behavior 【发布时间】:2014-07-20 01:25:01 【问题描述】:

我目前正在开发的应用程序需要离线功能。不幸的是,在过去的几天里,我们尝试在没有连接的情况下使用该应用程序,但我们发现了一些奇怪的东西。 当我们尝试使用saveEventually 时,我们会在日志中看到以下调试跟踪:

2014-07-19 18:00:00.079 BallisticBall[2371:8837] 错误:错误域=NSURLErrorDomain 代码=-1009“Internet 连接似乎已脱机。”用户信息=0x15dbc500 NSErrorFailingURLStringKey=api.parse.com/2/create, NSErrorFailingURLKey=api.parse.com/2/create, NSLocalizedDescription=Internet 连接似乎已脱机。, NSUnderlyingError=0x1ba79d20 "Internet 连接似乎已脱机。" (代码:100,版本:1.2.18) 2014-07-19 18:00:00.082 BallisticBall [2371:5907] 尝试运行最终命令超时。等待 600.000000 秒。剩余 5 次重试。

我等了十分钟,日志中出现了一个新条目:

错误:错误域=NSURLErrorDomain 代码=-1009“Internet 连接似乎处于脱机状态。”用户信息=0x15dce680 NSErrorFailingURLStringKey=api.parse.com/2/create, NSErrorFailingURLKey=api.parse.com/2/create, NSLocalizedDescription=Internet 连接似乎已脱机。, NSUnderlyingError=0x15ddfc50 "Internet 连接似乎已脱机。" (代码:100,版本:1.2.18) 2014-07-19 18:10:00.103 BallisticBall [2371:5907] 尝试运行最终命令超时。等待 600.000000 秒。剩余 4 次重试。

这是预期的行为吗?如果用户运行应用程序超过一小时,最后一次尝试后会发生什么?记录会被丢弃还是以其他方式保存?

【问题讨论】:

【参考方案1】:

SaveEventually 在您离线时也有效,另请参阅文档“Saving Objects Offline", 您也可以离线测试它,保存对象后,您可以在应用程序目录结构中找到它们 (Library/Private Documents/Parse/Command Cache), 当您重新联机时,您会注意到每个未保存的对象都作为文件等待分派。

【讨论】:

假设用户超过一个小时没有连接,前 5 次尝试后会发生什么?解析是否在某个超时后重试或停止尝试? saveEventually 将其存储在脱机文件中,一旦连接备份,saveInBackground 就会被处理,我不确定,保证脱机是文档中的 saveEventualy 当互联网备份时它不会保存它,所以这是不正确的信息 - 它仍然等待四个时间段到期,并将所有其他的保存最终排在它后面,这是可怕的行为。跨度>

以上是关于SaveEventually 离线行为的主要内容,如果未能解决你的问题,请参考以下文章

Firebase A/B 测试离线行为

离线数仓同步数据

cache.manifest / 离线使用网络应用程序的奇怪行为保存到 ipad ios6 上的主屏幕

大数据离线

Hadoop离线项目介绍

Hadoop离线项目介绍(不包括程序)