我在与iCloud同步NSFileWrapper文档时遇到问题。我能够创建我的包装器并将其保存到我无处不在的容器中。
当我尝试从创建它的设备中读取它时,它工作了。当我试图从另一个从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,要么未正确下载...
发布于 2013-12-18 07:44:15
这也把我逼疯了。解决方案相当简单,但苹果公司完全没有文档记录。您必须专门下载该文件。只会自动下载文件包装,但不会下载其内容。这就是为什么检查显示文件存在的原因。
在复制文件之前,调用类似如下的代码:
[[NSFileManager defaultManager]startDownloadingUbiquitousItemAtURL:cloudURL error:nil];相关:Cannot sync simple text file with iCloud (bad file descriptor)
https://stackoverflow.com/questions/14663625
复制相似问题