如何处理NSFileWrapper和并发?

时间:2016-06-26 22:00:07

标签: ios swift multithreading uidocument nsfilewrapper

使用pip3NSFileWrapper。文件写入发生在:

UIDocument

在saveMyData()中修改了包装器。

似乎发生的事情是class MyDocument: UIDocument { var wrapper: NSFileWrapper? override internal func contentsForType(typeName: String) throws -> AnyObject { // called by doc.saveToURL if wrapper != nil { // resaving an existing doc } else { wrapper = NSFileWrapper.init(directoryWithFileWrappers: [:]) saveMyData() } return wrapper! } } 在一个单独的线程上运行,并且在极少数情况下将运行,因为在saveMyData中修改了包装器,导致“在枚举时收集已突变”错误。

我已经阅读了有关Objective-C的contentsForType的其他主题,但Swift的等价物仍然让我感到困惑。什么是避免错误的最佳方法?另外,测试错误的最佳方法是什么?它可能发生在.001当时,在奇怪的情况下,当用户同时进行数据更改时保存运行。

我读过的一个可能的解决方案是使用@synchronized命令。是否可以通过以下方式将deferobjc_sync_enter包含在saveMyData()中?

objc_sync_exit

不确定哪个线程最终等待另一个线程以及如何。

谢谢!

0 个答案:

没有答案