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



我有一个应用程序,它使用本地数据文件存储用户信息,然后显示统计信息。我将这个文件像这样存储在我的应用程序的文档文件夹中('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");
    }

但是,然后我迷失在看似无用的信息海洋中。谁能给我解释一下(用简单的英语),为了实现我在介绍中描述的简单功能,需要实现什么方法?或者至少给我一个很好的入门教程,它在解释iCloud的基础知识方面比苹果的文档(我发现苹果的文档不是很有帮助)做得更好。

非常感谢!

你没有找到这些信息的原因是你试图以一种不同的方式使用iCloud,而不是它的设计工作。它不是一个服务器,你上传数据,然后从它下载。它是iOS上的一个后台服务,你让它自动同步文件。没有"上传"或"下载"API,而是有API标记文件无处不在(即同步)。

可以控制初始下载发生的时间。使用NSMetadataQuery定位用户iCloud帐户中的文件。然后通过[NSFileManager startDownloadingUbiquitousItemAtURL:error:]启动下载。一旦下载完成,你就有了一个无处不在的文件,并自动更改文件同步。

如果你想在同步数据和非同步本地文件之间有一个清晰的分离,你可能需要创建多个副本,并处理同步副本和非同步副本之间的数据复制。通常,您会将更改保存到非同步文件中。点击"上传",你可以将这些更改复制到同步版本。点击"下载",你可以将更改从同步版本复制到本地版本。我不完全确定苹果是否会允许这样做,因为这不是他们想让iCloud使用的方式,但至少在技术上是可行的。

最新更新