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

时间:2013-07-21 19:21:47

标签: ios icloud

我在Cloud 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 ];

1 个答案:

答案 0 :(得分:1)

您不能只将文件从iCloud复制到本地目录,因为该文件可能尚未存在于本地设备上。您的应用程序的iCloud文件仅按需下载,并且您没有做任何事情来创建该需求。因此,没有要复制的源文件。即使您知道该文件位于云中,也无法在本地存在之前对其进行访问。

如果您检查传递给error的{​​{1}}参数,您可能已经知道了这一点。

要下载您使用的文件copyItemAtURL:toURL:error:。这开始了这个过程。您可以使用以下方法之一找到下载完成的时间:

  • -[NSFileManager startDownloadingUbiquitousItemAtURL:error:],会在下载完成后发布更新,或
  • NSMetadataQuery,它不会通知您,但会有NSFileManager标记,您可以查看。