4

I'm implementing my drag&drop method. I need that when user drags something on my app window I can get that file URL. NSURL needs to be converted to char. Thats OK. But how to remove file:// from url? My current code:

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

its OK, but it gives url with file:// prefix. I tried using

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

but it says that

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

at

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

4 に答える 4

16

ファイルシステムの適切な表現で C 文字列としてファイル URL からパスに移動するには、次のようにします。

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

これにより、スキームを削除するとパスだけが残る、またはファイルシステムが UTF8 でエンコードされたパスを確実に受け入れるという仮定が回避されます。

于 2012-07-19T10:44:42.670 に答える
5
url = [url stringByReplacingOccurencesOfString:@"file://" withString:@""];

お役に立てれば。乾杯!

于 2012-07-19T10:18:19.783 に答える
2

@ user23743 の答えは正しいです。ただし、iOS 7 以降NSURLには独自のfilestSystemRepresentation方法があります。

スウィフトの場合:

if let fileURL = NSURL(fromPasteboard: pboard) {
    let representation = fileURL.fileSystemRepresentation
}
于 2016-03-09T05:48:08.457 に答える