2011-10-23 24 views
2

我用下面的代碼打開一個文件NSOpenPanel URL字符串

NSOpenPanel * panel = [NSOpenPanel openPanel]; 
      [panel setCanSelectHiddenExtension:YES]; 
      [panel setRequiredFileType:@"scpt"]; 
      [panel setAllowsOtherFileTypes:NO]; 

      [panel 
      beginSheetForDirectory:nil 
      file:@"Script" 
      modalForWindow:[self window] 
      modalDelegate:self 
      didEndSelector:@selector (openFileDidEnd:returnCode:contextInfo:) 
      contextInfo:nil]; 

-(void)openFileDidEnd:(NSSavePanel*)panel returnCode:(int)returnCode contextInfo:(void*)contextInfo 
{ 


if(returnCode == NSOKButton) 
{ 

    NSString *s=[[panel URL] absoluteString]; 
    [NSThread detachNewThreadSelector:@selector(setFileString:) toTarget:self withObject:s ]; 

} 
}; 

價值是 '文件://home/Users/myName/Desktop/1.scpt'

如果我叫

如果與路徑S中的文件存在
bool b=[[NSFileManager defaultManager] fileExistsAtPath:@"file://home/Users/myName/Desktop/1.scpt"]; 

檢查,它總是返回0

,但如果我在搜索檢查,我發現它的路徑是「/用戶/ myNam e/Desktop/1.scpt'

bool b=[[NSFileManager defaultManager] fileExistsAtPath:@"/Users/myName/Desktop/1.scpt"]; 

會返回YES!

如何從NSOpenPanel的URL獲取正確的字符串路徑?

歡迎任何評論

回答

5
NSString *s=[[panel URL] absoluteString]; 

應該

NSString *s=[[panel URL] path]; 

如果你的目標雪豹或更高版本,我建議使用

- (void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void (^)(NSInteger result))handler 

因爲你使用的方法是不推薦使用,使用塊更容易。

+0

爲了澄清這個問題,URL響應'absoluteString'和URL的字符串表示形式。這不是一個路徑名,不能用於像'fileExistsAtPath:'這樣的方法。要獲取URL的路徑名,您需要詢問它的「路徑」。 –