从iCloud开始,NSFileWrapper失败并从本地目录运行

时间:2013-02-02 15:53:11

标签: ios crash icloud nsfilewrapper

我在将NSFileWrapper文档与iCloud同步时遇到问题。我能够创建我的包装并将其保存到我无处不在的容器中。

当我尝试从创建它的设备中读取它时,它可以工作。当我尝试从iCloud读取另一台设备时,它会崩溃。

一些代码:

此函数用于添加带有NSString的包装容器

- (void) addNSString:(NSString*)_string toFileWrapper:(NSFileWrapper*)_wrapper forKey:(NSString*)_key {

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:_string];

    if(data) {

        [_wrapper addRegularFileWithContents:data preferredFilename:_key];
    }

}

接下来就是我如何解码它:

- (id) unarchiveObjectFromWrappers:(NSDictionary*)_wrappers withKey:(NSString*)_key {

    id value = nil;

    NSFileWrapper *wrapper = [_wrappers valueForKey:_key];
    if(wrapper) {

        NSData *data = [wrapper regularFileContents];

        if(data) {

            value = [NSKeyedUnarchiver unarchiveObjectWithData:data];
        }
    }

    return value;
}

解码部分在一个设备上工作而不在其他设备上工作(当NSKeyedUnarchiver尝试从NSData解压缩时,EXC_BAD_ACCESS。NSData似乎很好,它具有适当的长度和一切,但是当我尝试记录其数据时,例如它崩溃)。

我的猜测是,NSFileWrapper不下载其全部内容,只下载其结构,我必须做一些事情才能使其可用。但我不知道是什么。

有什么想法吗?

======

编辑:

NSURLUbiquitousItemIsDownloadedKey表示文件已下载但是如果我尝试将其复制到沙箱中,则会因此错误而失败:“操作无法完成。错误的文件描述符”

因此文件未正确上传到iCloud或未正确下载...

1 个答案:

答案 0 :(得分:1)

它也让我发疯了。解决方案相当简单,但完全没有Apple的记录。您必须专门下载该文件。仅自动下载文件包装器,但不会下载其内容。这就是支票说文件存在的原因。

在复制文件之前,请调用以下内容:

[[NSFileManager defaultManager]startDownloadingUbiquitousItemAtURL:cloudURL error:nil];

相关:Cannot sync simple text file with iCloud (bad file descriptor)