我有一个基于沙盒 NSDocument 的应用程序,它带有一个 Spotlight 插件来索引我的自定义文档。
在测试期间,我注意到 Spotlight 插件在索引文档时记录了很多错误:
5/4/15 3:11:18.765 PM sandboxd[432]: ([579]) mdworker(579) deny file-write-data
/Users/test/Desktop/test.document
(import fstype:hfs fsflag:480D000 flags:240000005E diag:0 isXCode:0
uti:com.test.document
plugin:/TestApp.app/Contents/Library/Spotlight/TestApp Spotlight Importer.mdimporter -
find suspect file using: sudo mdutil -t 407144)
看起来好像插件试图写入它索引的文件(尽管它只有只读访问权限)。
在我的 Spotlight 插件实现中,我没有做任何特别的事情来写入文档。我所做的只是初始化我的 NSDocument 子类以从文档中读取:
[[TTCustomDocument alloc] initWithContentsOfURL:url ofType:contentType error:outError];
这是堆栈跟踪:
Thread 4:
0 libsystem_kernel.dylib 0x00007fff9015ee92 __mac_syscall + 10
1 libsystem_sandbox.dylib 0x00007fff910140b0 sandbox_check + 206
2 AppKit 0x00007fff8f75fc38 -[NSDocument _autosavingPossibilityConcern] + 213
3 AppKit 0x00007fff8f75fb02 -[NSDocument _checkAutosavingPossibilityAndReturnError:] + 60
4 AppKit 0x00007fff8f75f9cf -[NSDocument _checkAutosavingAndReturnError:] + 26
5 AppKit 0x00007fff8f75f97e -[NSDocument _checkAutosavingAndUpdateLockedState] + 26
6 AppKit 0x00007fff8f75e420 -[NSDocument _initWithContentsOfURL:ofType:error:] + 319
7 AppKit 0x00007fff8f75e056 -[NSDocument initWithContentsOfURL:ofType:error:] + 230
看起来自动保存检查以某种方式尝试写入文档。
对此我能做些什么吗?是否有某种只读模式来打开 NSDocument?
更新:
重现:
- 创建一个新的 Xcode 项目:“Cocoa document based app”
- 添加 Spotlight 插件
- NSDocument 实现和 Spotlight 插件的代码在这里:https ://gist.github.com/anonymous/c4929586dfa11a473673