删除Objective-C中字符串中的字符

时间:2011-07-29 16:12:05

标签: objective-c cocoa

我有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工作,第二个不工作。

如果你能帮助我,我将很高兴,谢谢。

3 个答案:

答案 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);