2011-10-23 20 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的路径名,您需要询问它的“路径”。 –