我需要訪問包文件內的文件「數據」,這是另一個應用程序使用的項目文件。 該軟件包可以位於任何可用卷的任何位置。 因此,在我的應用程序中,我要求用戶找到他的項目,因此我獲得了項目路徑。 項目文件內部的結構總是相同的。所以我可以通過將項目「base」路徑附加到其內容目錄的路徑直到數據文件來找到數據文件。使用NSURL訪問包內的文件路徑
但是,當我打印路徑獲取所有目錄很好,但包文件名稱被撤回。 如果我只打印基本路徑,我會在最後得到包含軟件包的正確路徑。就像它的狀態不能出現在路徑中間一樣。
我也試過[NSBundle bundleWithPath]
,但它返回nul
。雖然查找器不會將項目文件視爲一個捆綁包,而是將其視爲一個包文件,但這只是絕望中的最後一次調用。
下面是代碼:
` NSOpenPanel *getPath = [NSOpenPanel openPanel];
NSArray* fileTypes = [[NSArray alloc] initWithObjects:@"logicx", nil];
[getPath setCanChooseFiles:YES];
[getPath setCanChooseDirectories:NO];
[getPath setTreatsFilePackagesAsDirectories:NO];
[getPath setTitle:@"Select your Logic Pro X project file"];
[getPath setAllowedFileTypes:fileTypes];
[getPath setCanCreateDirectories:YES];
NSInteger clicked = [getPath runModal];
if (clicked == NSFileHandlingPanelOKButton) {
for (NSURL *basePath in [getPath URLs]){
NSURL *url = [NSURL URLWithString:(@"Alternatives/000/ProjectData") relativeToURL:basePath];
// 「替代/ 000/ProjectData的」 是包文件
NSURL *absURL = [url absoluteURL];
NSLog(@"absURL = %@",absURL); `
項目包文件名的子路徑:「跟蹤補丁。 logicx」
如果我打印basePath
我得到:file:///Volumes/Media/Music/Logic/Track%20Patch.logicx
如果我打印absURL
這是需要的路徑,我得到absURL = file:///Volumes/Media/Music/Logic/Alternatives/000/ProjectData
包裹跟蹤補丁已被放棄在這裏。
如果我打印的網址(指針)我得到這個absURL = Alternatives/000/ProjectData -- file:///Volumes/Media/Music/Logic/Track%20Patch.logicx
因此該路徑被倒置這讓我覺得有一個與[NSURL URLWithString: relativeToURL:basePath];
功能的問題。順便說一句,--
是什麼意思?
任何幫助將不勝感激。
我真的很困惑,你問什麼。是‘替代/ 000/ProjectData的’你想看看包裝內的子路徑? –
是exaclty,對不起,如果我沒有clrear不過,我要編輯帖子來說明這一點,謝謝 – user306147