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

iOS:手动将本地存储的文件推送到iCloud,ios,iphone,objective-c,icloud,Ios,Iphone,Objective C,Icloud,我有一个应用程序,它使用本地数据文件存储用户信息,然后显示用户信息的统计信息。我将此文件存储在我的应用程序的文档文件夹中(“dataArra”是一个NSMutableArray): 这个很好用。但是,由于我的是一个通用应用程序,我希望这个文件在设备之间共享。但是,我希望我的用户手动执行此操作,即我不希望自动iCloud同步。换句话说,我想实现一个“上传”和一个“下载”按钮,让用户完全控制何时以及是否要同步这个文件 我的问题是,我读过的所有教程似乎都侧重于自动同步;所以,对我来说没用。另外,它们对

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

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

我的问题是,我读过的所有教程似乎都侧重于自动同步;所以,对我来说没用。另外,它们对我来说似乎都过于复杂了。我在我的应用程序中启用了iCloud支持,然后用以下方法检查它是否确实可用(我也了解iCloud背后的基本思想以及它应该如何工作):

但是,后来我迷失在信息的海洋中,这些信息似乎毫无用处。有人能向我解释一下(用简单的英语)为了实现我的简介中描述的简单功能,需要实现哪些方法吗?或者至少指导我一个好的初学者教程,它比苹果的文档(我觉得不是很有用)更能解释iCloud的基础知识


多谢各位

您找不到这些信息的原因是您试图以不同于其设计工作的方式使用iCloud。它不是一个服务器,您可以将数据上载到该服务器,然后再从该服务器下载数据。它是iOS上的后台服务,可以自动同步您告诉它要同步的文件。没有“上传”或“下载”API,而是有API将文件标记为无处不在(即同步)

您可以控制初始下载发生的时间。使用
NSMetadataQuery
查找用户iCloud帐户中的文件。然后使用
[NSFileManager startdownloadingubiquitousitemature:error://启动下载。下载完成后,您将拥有一个无处不在的文件,并自动更改文件同步

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

// 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];
NSURL *ubiq = [[NSFileManager defaultManager] 
URLForUbiquityContainerIdentifier:nil];
    if (ubiq) {
        NSLog(@"iCloud access at %@", ubiq);
        // TODO: Load document...
    } else {
        NSLog(@"No iCloud access");
    }