我想构建一个应用程序,很容易从一个文件格式转换为另一个。 (在同一目录)的想法是你的源文件拖到码头瓷砖和在源文件一起创建的输出文件OSX相关的文件创建
阅读文档后,我有正确安装的一切 - 我想...但它不起作用。
我的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_dest_type
拖放和输出文件接受my_src_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之间的转换也更加明显。 – abarnert 2013-04-26 23:44:25
此外,有两件事看起来很愚蠢,不应该在这里相关,但是......您是否尝试将_both_类型标记为'NSIsRelatedItemType',和/或将您的主类型从Viewer更改为Editor? – abarnert 2013-04-26 23:49:05
我只是尝试了两个“愚蠢”的想法......不幸的是它没有奏效。我需要使用NSOpenPanel代替拖放操作来代替我的代码。希望这会有所帮助。 – Tim 2013-04-27 02:23:30