Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NSOpenPanel字符串的URL_Cocoa - Fatal编程技术网

Cocoa NSOpenPanel字符串的URL

Cocoa NSOpenPanel字符串的URL,cocoa,Cocoa,我使用下面的代码打开一个文件 NSOpenPanel * panel = [NSOpenPanel openPanel]; [panel setCanSelectHiddenExtension:YES]; [panel setRequiredFileType:@"scpt"]; [panel setAllowsOtherFileTypes:NO]; [panel b

我使用下面的代码打开一个文件

    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 ];

}
};
它的价值是file://home/Users/myName/Desktop/1.scpt"

bool b=[[NSFileManager defaultManager] fileExistsAtPath:@"/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"];
会回来的是

如何从NSOpenPanel的url获取正确的字符串路径

欢迎评论

NSString *s=[[panel URL] absoluteString];
应该是

NSString *s=[[panel URL] path];
如果您的目标是雪豹或更高版本,我建议使用

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

由于您使用的方法已被弃用,因此使用块要容易得多。

为了澄清问题,URL使用URL的字符串表示形式响应
absoluteString
。这不是路径名,不能与需要路径名的
fileExistsAtPath:
等方法一起使用。要获取URL的路径名,您需要请求它提供其
路径