gpt4 book ai didi

cocoa - Spotlight 插件读取 NSDocument 导致控制台中出现 "deny file-write-data"错误

转载 作者:行者123 更新时间:2023-12-03 17:20:35 26 4
gpt4 key购买 nike

我有一个基于沙盒 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?

更新:

重现:

  1. 创建一个新的 Xcode 项目:“基于 Cocoa 文档的应用程序”
  2. 添加 Spotlight 插件
  3. NSDocument 实现和 Spotlight 插件的代码位于:https://gist.github.com/anonymous/c4929586dfa11a473673

最佳答案

好的,那么 -[TTCustomDocument initWithContentsOfURL:ofType:error:] 或任何其他自定义初始化代码的代码在哪里,以及您的 -readFromURL:ofType:error 以及相关代码?您可能会从这些(init...和/或read...)方法之一触发某些内容,导致文档被标记为脏(具有未保存的更改),从而导致自动保存系统被触发。这是 TTCustomDocument 类中的不正确行为。

我的猜测是您正在触发一些向文档的撤消管理器注册更改的内容。如果它是核心数据文档并且您正在设置一些初始数据,则很容易做到;如果您以调用您自己的撤消感知漏斗方法之一的方式设置初始数据,也很容易做到。最简单的解决方法(文档推荐)是在更改之前调用 [self.undoManagerdisableUndoRegistration]; 和 `[self.undoManagerenableUndoRegistration];更改之后和返回 self 之前。

关于cocoa - Spotlight 插件读取 NSDocument 导致控制台中出现 "deny file-write-data"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30031264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com