通过NSSrray的URLS循环 - 崩溃 - iOS

时间:2014-05-01 09:48:13

标签: ios objective-c url for-loop nsarray

我想循环遍历我的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'

2 个答案:

答案 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中,设置一个触发所有异常的断点,这样在发现问题时,它会在崩溃之前停止。这样你就可以看到调用堆栈,并且可以在代码中找到问题所在。