拖放不带“file://”的 NSURL

问题描述 投票:0回答:4

我正在实现我的拖放方法。我需要当用户在我的应用程序窗口上拖动某些内容时我可以获取该文件 URL。

NSURL
需要转换为
char
。没关系。但是如何从网址中删除
file://
呢?我当前的代码:

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

它可以,但它给出带有

file://
前缀的 url。我尝试使用

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];
objective-c xcode macos cocoa drag-and-drop
4个回答
16
投票

要从文件 URL 转到文件系统适当表示形式的 C 字符串路径,您需要执行以下操作:

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

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


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

2
投票

@user23743的答案是正确的。从 iOS 7 开始,虽然

NSURL
有自己的
filestSystemRepresentation
方法。

在斯威夫特:

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

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

对我来说最有效。

© www.soinside.com 2019 - 2024. All rights reserved.