iOS:手动将本地存储的文件推送到 iCloud

Posted

技术标签:

【中文标题】iOS:手动将本地存储的文件推送到 iCloud【英文标题】:iOS: Manually Push Locally Stored File to iCloud 【发布时间】:2014-03-30 07:56:55 【问题描述】:

我有一个应用程序,它使用本地数据文件来存储用户信息,然后显示它的统计信息。我将此文件存储在我的应用程序的文档文件夹中('dataArra' 是一个 NSMutableArray):

// Define folder and file name
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
gameDataFile = [documentsDirectory stringByAppendingPathComponent:@"data.dat"];

// Write content of 'dataArray' to locally stored file
[dataArray writeToFile:gameDataFile atomically:YES];

这很好用。但是,由于我的是一个通用应用程序,我希望这个文件可以在设备之间共享。但是,我希望我的用户手动执行此操作,即。我不想要自动 iCloud 同步。换句话说,我想实现一个“上传”和一个“下载”按钮,让用户可以完全控制何时以及是否要同步这个单个文件。

我的问题是,我看的教程似乎都在关注自动同步;因此,对我没用。另外,就我的目的而言,它们似乎都过于复杂。我已经在我的应用程序中启用了 iCloud 支持,然后通过以下方法检查它是否确实可用(我也了解 iCloud 背后的基本思想以及它应该如何工作):

NSURL *ubiq = [[NSFileManager defaultManager] 
URLForUbiquityContainerIdentifier:nil];
    if (ubiq) 
        NSLog(@"iCloud access at %@", ubiq);
        // TODO: Load document...
     else 
        NSLog(@"No iCloud access");
    

但是,后来我迷失在看似无用的信息的海洋中。谁能向我解释(用简单的英语)为了实现我介绍中描述的简单功能需要实现哪些方法?或者至少将我引导到一个很好的初学者教程,它比 Apple 的文档(我发现它不是很有帮助)更好地解释了 iCloud 的基础知识。

非常感谢!

【问题讨论】:

【参考方案1】:

您没有找到此信息的原因是您尝试以不同于其设计工作方式的方式使用 iCloud。它不是您将数据上传到然后从其下载的服务器。它是 ios 上的一项后台服务,可自动同步您告诉它同步的文件。没有“上传”或“下载”API,而是有将文件标记为普遍存在(即同步)的 API。

您可以控制初始下载的时间。使用NSMetadataQuery 在用户的 iCloud 帐户中查找文件。然后使用[NSFileManager startDownloadingUbiquitousItemAtURL:error:] 启动下载。但是,一旦下载完成,您就会拥有一个无处不在的文件,并且文件的更改会自动同步。

如果您希望将同步数据和非同步本地文件完全分开,您可能需要制作副本,并处理同步副本和非同步副本之间的数据复制。通常,您会将更改保存到非同步文件。在“上传”时,您会将这些更改复制到同步版本。在“下载”时,您会将更改从同步版本复制到本地版本。我不完全确定 Apple 是否会允许这样做,因为这不是使用 iCloud 的意思,但至少在技术上是可行的。

【讨论】:

以上是关于iOS:手动将本地存储的文件推送到 iCloud的主要内容,如果未能解决你的问题,请参考以下文章

当流星文件更改时,将新版本推送到 iOS 上的开发/测试设备(流星运行 ios-device)

如何将 Fossil 本地存储库推送到远程托管

如何将代码从新的本地文件夹推送到现有 Github 存储库的主分支并保留提交历史记录?

如何将Fossil本地存储库推送到远程主机

在 iOS 7 中禁用 Core Data 中的 iCloud(也就是将持久存储文件迁移到本地)

使用git命令将本地项目推送到远程仓库