如何使用文件管理器将 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 ];
【问题讨论】:
您检查过ubiq
和cloudContainerURL
都不是零吗?为什么你两次得到相同的值?你检查copyItemAtURL:
的返回值了吗?如果它返回NO
,记录错误。你得到了什么?
dirURL
似乎有一个很大的错字。您的应用中的代码实际上是有效的吗?
不要只是说你做不到。具体是什么问题?您观察到哪些症状与您的预期不同?
【参考方案1】:
您不能只将文件从 iCloud 复制到本地目录,因为该文件可能尚不存在于本地设备上。您的应用程序的 iCloud 文件只会按需下载,而您没有做任何事情来创建这种需求。结果,没有要复制的源文件。即使您知道该文件在云端,您也无法访问它,除非它存在于本地。
如果您检查传递给 copyItemAtURL:toURL:error:
的 error
参数,您可能已经知道这一点。
要下载文件,请使用-[NSFileManager startDownloadingUbiquitousItemAtURL:error:]
。这开始了这个过程。您可以使用以下方法之一了解下载何时完成:
NSMetadataQuery
,它将在下载完成时发布更新,或者
NSFileManager
,它不会通知您,但确实有一个您可以检查的 NSURLUbiquitousItemIsDownloadedKey
标志。
【讨论】:
以上是关于如何使用文件管理器将 iCloud 中的文件复制到应用沙箱的主要内容,如果未能解决你的问题,请参考以下文章
如何在特定文件夹中的 iCloud 上传图像并在目标 C 中以编程方式访问该特定文件夹
Yosemite、iOS 8 和 iCloud 驱动器:将移动设备同步到桌面?
如何将 AVCaptureMovieFileOutput 保存到 iCloud