我有一个UIDocument
基于 s 的应用程序NSFileWrapper
来存储数据。“主”文件包装器包含许多附加的目录文件包装器,每一个都代表文档的不同页面。
UIDocument
每当我在保存(在)时对文档进行更改时writeContents:andAttributes:safelyToURL:forSaveOperation:error:
,应用程序就会崩溃。这是堆栈跟踪:
很明显,我正在修改UIDocument
在后台枚举的文件包装器的同一实例。实际上,我检查了在返回数据模型的快照时contentsForType:error:
,返回的子文件包装器指向与数据模型中当前驻留(和正在编辑)的对象相同的对象,而不是副本。
- (id)contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError
{
if (!_fileWrapper) {
[self setupEmptyDocument];
}
return [[NSFileWrapper alloc] initDirectoryWithFileWrappers:[_fileWrapper fileWrappers]];
}
这是实施此方法的认可方法(根据WWDC 2012 Session 218 - Using iCloud with UIDocument)。
所以我想问题是:这种方法如何是线程安全的?
当主文件包装器fileWrappers
本身是目录文件包装器时,情况是否有所不同?如果制裁的方法是错误的,应该怎么做?