我在将 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,要么没有正确下载......