Почему у меня есть ошибка для удаления символов из NSString? - PullRequest
0 голосов
/ 26 ноября 2011

здесь, в моем коде, я пытаюсь загрузить файл ROBOTS.TXT и затем отфильтровать их по строке «Disallow», затем, если в этой строке есть «Disallow string», удалите эту строку и верните остаток строки.

вот образец ROBOTS.TXT

Пользователь-агент: *

Disallow: / поиск

Запретить: / groups

Disallow: / images

Запретить: / catalogs

Разрешить: / каталоги / о

Запретить: / catalogs

Запретить: / news

Разрешить: / news / directory

и вот код, который у меня есть:

NSRange range;
NSURL *url=[NSURL URLWithString:@"http://www.google.com/robots.txt"];

NSString *content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

NSArray *parsed = [content componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];

NSMutableArray *robots=[[[NSMutableArray alloc] init] autorelease];

NSMutableString *line= [[[NSMutableString alloc] init] autorelease];


for(line in parsed){
    range=[line rangeOfString:@"Disallow"];
    if (range.location != NSNotFound) {
        [line deleteCharactersInRange: NSMakeRange(1,9 )];
        [robots addObject:line];

    }
}   

и вот ошибка:

* Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Попытка изменить неизменяемое объект с deleteCharactersInRange: '

Ответы [ 2 ]

0 голосов
/ 26 ноября 2011

Переменная line в for(line in parsed) является неизменной, поскольку NSString возвращается конструкцией оператора for-in.

Вероятно, что вам нужно:

for(NSString *line in parsed) {
    if [line hasPrefix:@"Disallow"]) {
        [robots addObject:[line substringFromIndex:9];
    }
}   
0 голосов
/ 26 ноября 2011

Метод componentSeparatedByCharactersInSet возвращает NSArray NSString.NSString является неизменным.Вы объявляете строку как NSMutableString, но объект, которому назначается строка, все еще является NSString.

...