拖放NSURL而不使用“file://”

时间:2012-07-19 10:12:01

标签: objective-c xcode macos cocoa drag-and-drop

我正在实施我的拖放方法。我需要当用户在我的应用程序窗口中拖动某些内容时,我可以获取该文件URL。 NSURL需要转换为char。没关系。但是如何从网址中删除file://?我目前的代码:

pboard = [sender draggingPasteboard];
NSString *url = [[NSURL URLFromPasteboard:pboard] absoluteString];
input_imageN = strdup([url UTF8String]);

没关系,但它为网址提供了file://前缀。我尝试使用

NSURL *fileUrl = [[NSURL URLFromPasteboard:pboard] isFileURL];
NSString *url = [fileUrl absoluteString];
NSLog(@"url: %@", [NSURL URLFromPasteboard:pboard]);
input_imageN = strdup([url UTF8String]);

但它说

Cannot initialize a variable of type 'NSURL *' with an rvalue of type 'BOOL' (aka 'signed char')

NSURL *fileUrl = [[NSURL URLFromPasteboard:pboard] isFileURL];

4 个答案:

答案 0 :(得分:15)

要在文件系统的相应表示形式中将文件URL作为C字符串转到路径,您可以执行以下操作:

NSURL *fileURL = [NSURL URLFromPasteboard: pboard];
NSString *filePath = [fileURL path];
char *filesystemRepresentation = [filePath filesystemRepresentation];

这避免了剥离方案的假设只留下了路径,或者文件系统肯定很乐意接受UTF8编码的路径。

答案 1 :(得分:4)

url = [url stringByReplacingOccurencesOfString:@"file://" withString:@""];

希望这会有所帮助。干杯!

答案 2 :(得分:1)

@ user23743的回答是正确的。由于iOS 7虽然NSURL有自己的filestSystemRepresentation方法。

在斯威夫特:

if let fileURL = NSURL(fromPasteboard: pboard) {
    let representation = fileURL.fileSystemRepresentation
}

答案 3 :(得分:1)

if let fileURL = NSURL(from: pboard)?.filePathURL {
}

对我来说最有效。