我想構建一個應用程序,很容易從一個文件格式轉換爲另一個。 (在同一目錄)的想法是你的源文件拖到碼頭瓷磚和在源文件一起創建的輸出文件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