我已经开发了已在IOS,Android和Chrome运行得相当好5年以上的混合移动应用程序。我的应用程序使用一个索引资料数据库,维护应用程序的状态,并保存它重新启动之间,但也有一些情况下,IOS可以清除IndexedDB的特别是如果该客户端设备上的内存运行低。
我想就如何使用iOS设备上的本地SQL数据库,以提高我的应用程序的恢复能力的基础上,有望期望保持索引资料的平行副本IOS不会随意决定以清除内部的一些帮助SQL数据库属于应用程序。
我知道如何在目标C和Javascript之间的双向沟通,但我没有在目标C foggiest知道如何:
任何指针有用的资源就如何实现这一目标或更好的编码例子将是非常赞赏。
我只是想,我没有使用科尔多瓦或任何其他类似的应用程序开发环境,所以请不要认为一个SQLite插件,是一个更大的环境的一部分来添加。我已经得到了我与一个定制的编码方法,即,我想保持这种方式。
我已经探讨了并联每个索引资料保存到与希望的iOS应用的文档文件夹的文件的写,这是不太可能比缓存文件夹被抹去的想法。
在每次IndexedDB的setItem一键 - 值对我传递给Objective-C的iOS应用程序代码的请求创建与应用程序的文档文件夹中创建子文件的文本文件,名为“key'.txt和内容设定值。
在每次索引资料的removeItem,我传递给Objective-C的iOS应用程序代码的请求删除相应文本文件“key'.txt。
在每次IndexedDB的clearAll,我删除上面创建的整个子文件夹。
现在,当应用程序启动并发现一个空localForage数据库,我传递给Objective-C的iOS应用程序代码的请求,以测试是否子文件夹关键项是有或没有。
如果不是,那么这是一个新的安装应用程序,并继续正常的这种情况。
如果是,那么这就是已被删除的索引资料数据库的情况。
在这种情况下,我要求客观-C IOS应用代码,使其回到设定键,通过检查上面创建的文件夹的内容和剥离中的.txt位和的IOS模拟器忽略DS_Store文件的情况下。
一个接一个,然后我要求每个密钥文件的内容,并回它们加载到前面空localForage数据库,并在这项工作已经完成,我可以继续,如果它没有被删除。
我发现,这是必要的,要求每个值,以防止恢复大型数据库时调用堆栈超出误差之前先使用零超时时间在JavaScript。
这种做法似乎工作,我可以使用Safari开发资源选项卡行动,以清除数据库,然后手动重新启动应用程序测试此的任何时间。使用相同的标签,你可以看被重新填充IndexedDB的数据库。
由于我的数据库的大小,其实我创建了一组不同类型的键的子文件夹,这样我就可以选择在其中被还原的数据库项目的顺序,尤其是我的应用程序常常起死回生的背景下面一个显著的位置变化,在这种情况下,没有对应用程序给予多久做这样的复苏强加的最大时间限制。这种结构设计当然是可选的,并且只需要大型数据库。
下面的说明是谁想要尝试这种方法,并在XCode中使用10.1 Objective C的假设
希望这可以帮助。