如何使用文件管理器将 iCloud 中的文件复制到应用沙箱

Posted

技术标签:

【中文标题】如何使用文件管理器将 iCloud 中的文件复制到应用沙箱【英文标题】:How to copy file in iCloud to app sandbox using File Manager 【发布时间】:2013-07-21 19:21:46 【问题描述】:

我在云中有一个 15.2 kb 的文件。我无法将其复制回应用程序沙箱。我的代码在下面列出。任何帮助表示赞赏

    NSURL *ubiq = [[NSFileManager defaultManager]
                   URLForUbiquityContainerIdentifier:nil];
if (ubiq)
    
    NSError *error = nil;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSURL *cloudContainerURL = [fileManager URLForUbiquityContainerIdentifier:nil]:
    NSURL*dirURL=[cloudContainerURL URLByAppendingPathComponent:@"Documents" isDirectory:YES];
    [fileManager createDirectoryAtURL:dirURL withIntermediateDirectories:NO  attributes:nil error:&error];
     NSURL *icloudURL = [dirURL URLByAppendingPathComponent:@"Passwords File.txt"];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];

    // Destination path
    NSString *fileInDocumentsPath = [documentsPath  stringByAppendingPathComponent:@"Passwords File.txt"];
     NSURL* sandboxDocumentURL = [NSURL fileURLWithPath:fileInDocumentsPath];

  [[ NSFileManager defaultManager ] copyItemAtURL:icloudURL toURL:sandboxDocumentURL error:&error ];

【问题讨论】:

您检查过ubiqcloudContainerURL 都不是零吗?为什么你两次得到相同的值?你检查copyItemAtURL:的返回值了吗?如果它返回NO,记录错误。你得到了什么? dirURL 似乎有一个很大的错字。您的应用中的代码实际上是有效的吗? 不要只是说你做不到。具体是什么问题?您观察到哪些症状与您的预期不同? 【参考方案1】:

您不能只将文件从 iCloud 复制到本地目录,因为该文件可能尚不存在于本地设备上。您的应用程序的 iCloud 文件只会按需下载,而您没有做任何事情来创建这种需求。结果,没有要复制的源文件。即使您知道该文件在云端,您也无法访问它,除非它存在于本地。

如果您检查传递给 copyItemAtURL:toURL:error:error 参数,您可能已经知道这一点。

要下载文件,请使用-[NSFileManager startDownloadingUbiquitousItemAtURL:error:]。这开始了这个过程。您可以使用以下方法之一了解下载何时完成:

NSMetadataQuery,它将在下载完成时发布更新,或者 NSFileManager,它不会通知您,但确实有一个您可以检查的 NSURLUbiquitousItemIsDownloadedKey 标志。

【讨论】:

以上是关于如何使用文件管理器将 iCloud 中的文件复制到应用沙箱的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式从 icloud 获取 ics 文件?

如何在特定文件夹中的 iCloud 上传图像并在目标 C 中以编程方式访问该特定文件夹

Yosemite、iOS 8 和 iCloud 驱动器:将移动设备同步到桌面?

如何将 AVCaptureMovieFileOutput 保存到 iCloud

icloud 复制得到一个错误 Domain=NSCocoaErrorDomain Code=512

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