我正在尝试构建一个可以轻松地从一种文件格式转换到另一种文件格式的应用程序。其想法是将源文件拖到dock tile上,输出文件将与源文件一起创建(在同一目录中)。
在阅读了文档之后,我已经正确地设置了所有内容--我想...但它不起作用。
我的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发布于 2013-04-27 11:43:30
事实证明,addFilePresenter:是的,而不是的、同步的或即时的。我所要做的就是在addFilePresenter:之后调用[NSFileCoordinator filePresenters],它似乎具有阻塞的效果,直到所有的文件呈现程序都准备就绪。
另外,我使用的是Qt,所以让我感到惊喜的是,这一切都可以工作,而不需要从更可怕的NSFileCoordinator方法中获得专门创建的NSURL对象。
发布于 2013-07-04 01:09:27
此错误的另一个原因可能是项目信息文件中的UTI定义不正确或缺失。
UTI必须定义为文档类型,并且它应该与UTI定义的导入/导出的UTI部分相同(如果它不是内置的UTI)。
https://stackoverflow.com/questions/16246349
复制相似问题