如何仅使用 iOS 5+ 和 Cordova 3.5 在本地永久存储数据文件?

Posted

技术标签:

【中文标题】如何仅使用 iOS 5+ 和 Cordova 3.5 在本地永久存储数据文件?【英文标题】:How to store data files permanently and locally only with iOS 5+ and Cordova 3.5? 【发布时间】:2014-10-10 06:10:01 【问题描述】:

我想将一些数据文件存储在一个相当永久的位置,该位置应该与 iCloud 同步。

按照 Cordova 文档,cordova.file.cacheDirectory 是我的最佳选择:

cordova.file.cacheDirectory - 缓存数据文件或您的应用可以轻松重新创建的任何文件的目录。当设备存储空间不足时,操作系统可能会删除这些文件,但是,应用程序不应依赖操作系统来删除此处的文件

为了控制是否达到我的目标,我检查了 iCloud 同步的数据大小:

安装并启动您的应用 转到设置 > iCloud > 存储和备份 > 管理存储 如有必要,点按“显示所有应用”检查应用的存储空间

嗯,我的应用总是那么重...

这是我到目前为止所做的:

Xcode 中的云授权已关闭

config.xml

<preference name="BackupWebStorage" value="none" />
<preference name="iosPersistentFileLocation" value="Library" />

javascript

function onDeviceReady()
    window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem ;
    window.requestFileSYstem(LocalFileSystem.PERSISTENT, 0, gotFS, function()
       console.log('Error FS');         
    );


function gotFS(fileSystem)
    window.cacheFS = fileSystem.cacheDirectory;


document.addEventListener('deviceReady', onDeviceReady, false);

然后,我使用cacheFS.toURL() 作为基本目录来存储文件。

你能看到我错过了什么吗?

Apple 表示不应同步的数据应具有“不备份”属性,NSURL 对象的NSURLIsExcludedFromBackupKey 属性,CFURLRef 对象的kCFURLIsExcludedFromBackupKey 属性。我不知道那些对象是什么,以及如何使用 Cordova 应用属性...

【问题讨论】:

【参考方案1】:

确实,我发现在应用程序文档目录的根目录下创建了一个NoCloud 文件夹。此文件夹中存储的所有数据都不会上传到 iCloud。

【讨论】:

【参考方案2】:

您可以通过以下方式获取文件:

window.resolveLocalFileSystemURL(
    cordova.file.dataDirectory,
    function gotDir(dir) 
        console.log("Data directory located");
        dir.getFile("new_file", create:true,
                    function(file) 
                        console.log("got the file", file);
                        file.createWriter(this.gotFileWriter,
                                          function fail() 
                                              console.log("Unable to create the writer");
                                         );
                   );
        ,
        function fail() 
            console.log("Unable to locate the data dir");
    );

【讨论】:

以上是关于如何仅使用 iOS 5+ 和 Cordova 3.5 在本地永久存储数据文件?的主要内容,如果未能解决你的问题,请参考以下文章

Cordova: 仅使用HTML/JS即可制作一个Android或者iOS的App

仅使用cordova的命令行创建IOS应用程序

Cordova 5.3.3 和安装的 Cordova iOS 3.9.1 在 iOS9 中无法访问互联网

Cordova 3.5.0 iOS 应用程序中的暂存文件夹需要啥?

Cordova 5.3.1 和 iOS9 平台 - 我无法从外部源加载图像和脚本

Cordova iOS 跨源请求仅支持 HTTP