将数据上传到 iCloud

Posted

技术标签:

【中文标题】将数据上传到 iCloud【英文标题】:Upload data to iCloud 【发布时间】:2013-01-31 15:06:40 【问题描述】:

我正在尝试使用以下代码将文档上传到 iCloud

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"test.png"];
NSURL* sourceURL = [[NSURL alloc]initWithString:path];

NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:[sourceURL path]]) 
    NSLog(@"File found!");

else
    NSLog(@"File not found!");




NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
if (ubiq) 
    NSLog(@"iCloud access at %@", ubiq);
    NSError* error = nil;
    NSURL *destinationURL = [ubiq URLByAppendingPathComponent:@"Documents/test.png"];
    [[NSFileManager defaultManager] setUbiquitous:YES
                                        itemAtURL:sourceURL
                                   destinationURL:destinationURL
                                            error:&error];
    if(error != nil)
        NSLog(@"Error while uploading the file: %@", error);
    
    else
        NSLog(@"File ulpoaded successfully");
    
else 
    NSLog(@"No iCloud access");

我尝试上传的文件存在(打印了“找到的文件”),但将其上传到 iCloud 会产生以下错误

Error while uploading the file: Error Domain=NSCocoaErrorDomain Code=513 "The operation couldn’t be completed. (Cocoa error 513.)" UserInfo=0x1dd6bda0 NSURL=/var/mobile/Applications/9F496F51-9DCA-4379-A62E-FFF7D7AB7385/VerticalSwipeArticles.app/test.png, NSUnderlyingError=0x1dd6c120 "The operation couldn’t be completed. Operation not permitted"

谢谢

【问题讨论】:

确保您的所有权利都是正确的,并且您在开发门户中已将应用标记为 iCloud。 是的,我查过了,没错 【参考方案1】:

使用 GCD 并从不同的线程调用 iCloud 代码(特别是 NSURL *ubiq =... 行)。在某些情况下,在主线程上调用它可能会阻塞应用程序。

你构建 iCloud 路径的方式在我看来很奇怪。试试这个:

NSURL *destinationURL = [[ubiq URLByAppendingPathComponent:@"Documents"] URLByAppendingPathComponent:@"test.png"];

【讨论】:

我应该在不同的线程中上传文件还是只上传 NSURL* ubiq= ... 行? 我尝试这样做,然后生成以下错误“无法完成操作。不允许操作” @ahmedelbagoury 我通常在不同的线程上做所有的 iCloud 工作,并在发布关于你的问题的 UI 更新/通知等时获取主队列,我没有明确的答案,还有其他相关的吗到 iCloud 工作?例如,您可以在 NSUbiquitousKeyValueStore 上存储简单的键对象吗? 在此之后我已经获得了上传成功的方法,之后我如何从 icloud 中检索我的数据?

以上是关于将数据上传到 iCloud的主要内容,如果未能解决你的问题,请参考以下文章

iCloud 已关闭,但设置仍显示正在上传的数据

强制 iOS 将文件上传到 iCloud

在 iCloud 上下载保存的数据

在我的应用程序上启用 iCloud 时,现有核心数据数据库未上传到 iCloud

将完整的 CoreData 上传(备份)到 iCloud Drive 并在需要时恢复

自动上传到 iCloud