2015-04-07 42 views
0

这是处理,我有一个应用程序,在该应用程序中,设备在背景中侦听iBeacons,并在用户通过范围内的区域时刻时间戳。最初,只要我得到一个didEnter回拨,我就有机会使用CloudKit将信息保存到iCloud。但有时运气不好,互联网在当时不可用,并且保存失败(例如,当用户在电梯中时)。缓存到内存,写入文件并保存到iCloud,同时iDevice被锁定

我试图使用FMDB将信息写入数据库并在应用程序进入前台时同步它们。那也行不通。由于默认情况下iOS8会加密磁盘,并且不允许我在用户锁定电话或重新启动电话后写入磁盘(尽管NSFileManager中有一些API允许您在写入文件之前写入文件,称为“ NSFileProtectionCompleteUnlessOpen“,但是在电话被锁定几个小时后它们不工作,也许是一个bug)。

第三种解决方案是将它们写入数组并使用可达性将它们同步到iCloud,只要我有机会(位置回调,appdelegate回调或reachabilityChanges通知)。但是这个解决方案对于终止应用程序并不安全如果用户关闭应用程序,我没有足够的时间去做任何事情。

最后的解决方案是所有的组合。如果磁盘已加密,则写入数组。如果未加密,则写入磁盘。将它们全部同步并在任何时候保存到互联网。在获得帮助之前,不想让自己陷入麻烦之中。

你有什么想法如何处理这个?

回答

1

在区域进入/退出事件之后,您有10秒的时间在后台执行。在此期间,您可以将数据保存到UserDefaults中的数组中。然后在应用程序处于活动状态时执行与CloudKit的同步。

+0

谢谢埃德温,电话锁定时UserDefualt不是加密吗? – CppChase

+0

我发现这个如何解决手机锁定和启动时iOS8上的NSUserDefault问题。我试试看。 http://stackoverflow.com/a/23093030/893771 – CppChase