首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从iCloud运行NSFileWrapper失败,从本地目录运行

从iCloud运行NSFileWrapper失败,从本地目录运行
EN

Stack Overflow用户
提问于 2013-02-02 23:53:11
回答 1查看 462关注 0票数 2

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

当我尝试从创建它的设备中读取它时,它工作了。当我试图从另一个从iCloud获取它的设备读取数据时,它崩溃了。

下面是一些代码:

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

代码语言:javascript
复制
- (void) addNSString:(NSString*)_string toFileWrapper:(NSFileWrapper*)_wrapper forKey:(NSString*)_key {

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:_string];

    if(data) {

        [_wrapper addRegularFileWithContents:data preferredFilename:_key];
    }

}

下面是我如何解码它:

代码语言:javascript
复制
- (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,要么未正确下载...

EN

回答 1

Stack Overflow用户

发布于 2013-12-18 07:44:15

这也把我逼疯了。解决方案相当简单,但苹果公司完全没有文档记录。您必须专门下载该文件。只会自动下载文件包装,但不会下载其内容。这就是为什么检查显示文件存在的原因。

在复制文件之前,调用类似如下的代码:

代码语言:javascript
复制
[[NSFileManager defaultManager]startDownloadingUbiquitousItemAtURL:cloudURL error:nil];

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14663625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档