我有NSOpenPanel
名为oPanel
。从它,我得到一个文件夹的路径。当我使用URL(而不是弃用的文件名)时,我想摆脱开头(file:// localhost)。
但我有以下错误,我无法理解:
2011-07-29 18:01:45.587 RedimV3[12857:407] -[NSURL length]: unrecognized selector sent to instance 0x1023543d0
2011-07-29 18:01:45.588 RedimV3[12857:407] -[NSURL length]: unrecognized selector sent to instance 0x1023543d0
以下是代码:
NSArray *files = [oPanel URLs];
NSLog(@"before: %@", [files objectAtIndex:0]);
NSMutableString *temp = [[NSMutableString alloc] initWithString:[files objectAtIndex:0]];
[temp deleteCharactersInRange:NSMakeRange(0,15)];
NSLog(@"after: %@",temp);
第一个NSLog工作,第二个不工作。
如果你能帮助我,我将很高兴,谢谢。
答案 0 :(得分:5)
[files objectAtIndex:0]
可能是NSURL,而不是NSString。请尝试使用[[files objectAtIndex:0] path]
。事实上,如果您使用-path
,您甚至不必担心file://
部分。
答案 1 :(得分:3)
如果您只是想要文件名,那么您可以按照@jtbandes的说法进行微调,以使用NSString的lastPathComponent实例方法
快速而肮脏的版本
NSArray *files = [oPanel URLs];
NSLog(@"before %@",[files objectAtIndex:0]);
NSString *fileName = [[[files objectAtIndex:0] path] lastPathComponent];
NSLog(@"after :%@",fileName);
更易读的代码版本
NSArray *files = [oPanel URLs];
NSURL *file = [files objectAtIndex:0];
NSLog(@"before %@",file);
NSString *localPath = [file path];
NSString *fileName = [localPath lastPathComponent];
NSLog(@"after :%@",fileName);
答案 2 :(得分:1)
您需要将NSURL转换为字符串...
NSURL *myURL = [files objectAtIndex:0];
NSMutableString *string = [NSMutableString stringWithString:[myURL absoluteString]];
[string deleteCharactersInRange:NSMakeRange(0,15)];
NSLog(@"after: %@", string);