NSOpenPanel URL 到字符串
Posted
技术标签:
【中文标题】NSOpenPanel URL 到字符串【英文标题】:NSOpenPanel URL to string 【发布时间】:2011-10-23 15:30:46 【问题描述】:我用下面的代码打开了一个文件
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 ];
;
s 值为 'file://home/Users/myName/Desktop/1.scpt'
如果我打电话
bool b=[[NSFileManager defaultManager] fileExistsAtPath:@"file://home/Users/myName/Desktop/1.scpt"];
检查路径为s的文件是否存在,总是返回0
但如果我检查了 Finder,我发现它的路径是 '/Users/myName/Desktop/1.scpt'
bool b=[[NSFileManager defaultManager] fileExistsAtPath:@"/Users/myName/Desktop/1.scpt"];
将返回 YES!
如何从 NSOpenPanel 的 url 中获取正确的字符串路径?
欢迎评论
【问题讨论】:
【参考方案1】:NSString *s=[[panel URL] absoluteString];
应该是
NSString *s=[[panel URL] path];
如果您的目标是 Snow Leopard 或更高版本,我建议您使用
- (void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void (^)(NSInteger result))handler
由于您使用的方法已弃用,因此使用块要容易得多。
【讨论】:
为了澄清问题,URL 使用 URL 的字符串表示形式响应absoluteString
。这不是路径名,不能与需要路径名的 fileExistsAtPath:
等方法一起使用。要获取 URL 的路径名,您需要向它询问其path
。以上是关于NSOpenPanel URL 到字符串的主要内容,如果未能解决你的问题,请参考以下文章