我想循环遍历我的NSArray *网址 - 对每个对象进行一些字符串调整。
然而,一旦它进入For循环并尝试调整NSString *的东西 - 这会引发异常。
关于为什么我难倒的任何想法?
- (void)GetData
{
NSFileManager *fm = [NSFileManager defaultManager];
NSString *directory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
directory = [NSString stringWithFormat:@"%@/%@/%@/%@", directory, self.researcherID, self.participantID, testTypeString];
directory = [directory stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSURL *url = [NSURL URLWithString:directory];
NSArray *urls = [fm contentsOfDirectoryAtURL:url includingPropertiesForKeys:nil options:0 error:&error];
for (int x = 0; x < urls.count; x++) {
NSString *urlIndex = urls[x];
NSString *thing = [urlIndex stringByReplacingOccurrencesOfString:@"%20" withString:@" "];
thing = [thing stringByReplacingOccurrencesOfString:@"file://" withString:@""];
// add thing to new array but crashes before i can
}
}
编辑: 抛出异常
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSURL stringByReplacingOccurrencesOfString:withString:]: unrecognized selector sent to instance 0x14ebf1a0'
答案 0 :(得分:5)
NSArray *urls = [fm contentsOfDirectoryAtURL:url includingPropertiesForKeys:nil options:0 error:&error];
返回NSURL
个对象的数组,而不是NSString
个。您可以将URL转换为字符串
只需
NSString *path = [urls[x] path];
使字符串操作过时。或者,使用
NSArray *files = [fm contentsOfDirectoryAtPath:directory error:&error];
返回NSString
个对象的数组,而不是NSURL
s。
答案 1 :(得分:1)
抛出的异常使其非常明显。
'-[NSURL stringByReplacingOccurrencesOfString:withString:]: unrecognized selector
您正在将消息stringByReplacingOccurrencesOfString:withString:发送到类NSURL的对象,该对象无法识别它。这就是问题所在。
你很幸运;呼叫在你自己的代码中,在这里:
NSString *thing = [urlIndex stringByReplacingOccurrencesOfString:@"%20" withString:@" "];
您认为urlIndex是NSString,但实际上它是NSURL,因此您必须找到正确的NSURL方法。仅仅因为你将数组元素分配给NSString *并不能使它成为NSString *。
将来:在Xcode中,设置一个触发所有异常的断点,这样在发现问题时,它会在崩溃之前停止。这样你就可以看到调用堆栈,并且可以在代码中找到问题所在。