【发布时间】:2013-04-26 22:50:51
【问题描述】:
我正在尝试构建一个可以轻松从一种文件格式转换为另一种文件格式的应用程序。这个想法是将源文件拖到停靠图块上,然后在源文件旁边(在同一目录中)创建输出文件。
阅读文档后,我的所有设置都正确 - 我认为...但它不起作用。
我的 Info.plist 包含以下内容:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
my_src_type
</array>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
[...]
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
my_dest_type
</array>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>NSIsRelatedItemType</key>
<true/>
[...]
</dict>
</array>
如果我正确阅读了文档,这应该允许我的应用程序通过拖放来接受my_src_type 的文件,并在与输入文件相同的目录中输出my_dest_type 的文件,当然前提是我让沙盒知道。
为此,我有一个看起来像这样的SimpleFilePresenter:
@interface SimpleFilePresenter : NSObject<NSFilePresenter>
@property (atomic, strong) NSURL *presentedItemURL;
@property (atomic, strong) NSURL *primaryPresentedItemURL;
@end
@implementation SimpleFilePresenter
- (NSOperationQueue *)presentedItemOperationQueue {
return [NSOperationQueue mainQueue];
}
@end
当我使用 addFilePresenter: 请求创建输出文件的权限时,我在控制台中收到以下错误。
2013-04-26 6:33:52.741 PM my_app[27639]: NSFileSandboxingRequestRelatedItemExtension: an error was received from pboxd instead of a token. Domain: NSPOSIXErrorDomain, code: 1
2013-04-26 6:33:52.741 PM my_app[27639]: +[NSFileCoordinator addFilePresenter:] could not get a sandbox extension. primaryPresentedItemURL: file://[...]/file.my_src_type, presentedItemURL: file://[...]/file.my_dest_type
【问题讨论】:
-
不是一个答案,但是……我发现当使用显式
NSOpenPanel/NSSavePanel而不是其他开放机制(如拖动到停靠栏)时,这些东西更容易调试。当你做错事时,你会得到更多的日志记录,更神秘的问题要搜索,当然还有你的应用程序和 Powerbox 之间更明显的过渡。 -
另外,有两件事可能看起来很愚蠢,不应该在这里相关,但是……您是否尝试过将 both 类型标记为
NSIsRelatedItemType,和/或更改您的从查看器到编辑器的主要类型? -
我刚刚尝试了两个“愚蠢”的想法......不幸的是它没有奏效。我需要稍微修改一下我的代码才能使用 NSOpenPanel 而不是拖放。希望这会有所帮助。
-
使用 NSOpenPanel 的时间比预期的要短,但在日志中根本没有改变。
标签: objective-c macos sandbox nsfilecoordinator