Почему NSScanner не находит первое вхождение целевой строки?

У меня есть приложение Obj-c, которое работало; сейчас это не так. Это часть строки, которую я пытаюсь проанализировать:

http://cdn.openisbn.com/images/no_book_cover.jpg'); border: solid 1px # 383c40; "src = / cover / 0345377443_220.jpg width = 220 border = 0 title =" Женщины, которые бегают с волками: мифы и истории Архетип дикой женщины ">Авторы: Кларисса Пинкола Эстес
Издатель: Ballantine Книги

Через несколько тысяч символов появляется этот текст:

http://cdn.openisbn.com/images/no_book_cover.jpg');"; src=/cover/006251380X_72.jpg width=72 height=114 border=0 title="Верный садовник: мудрый рассказ о том, что никогда не умрет">
Верный садовник: мудрый рассказ о том, что никогда не умрет
http://cdn.openisbn.com/images/no_book_cover.jpg'); "

Это мой код, чтобы найти заголовок:

[scanner setScanLocation:0];
[scanner setCaseSensitive:NO];
[scanner scanUpToString:@" border=0 title=\"" intoString:nil];  //  title
scanner.scanLocation += 17;
[scanner scanUpToString:@"\">" intoString:&tempString];
oTitle.text = tempString;

Происходит следующее: он пропускает первое вхождение (Women Who Run...) целевой строки и находит второе вхождение (The Faithful Gardner) и возвращает его, а не первое. Поскольку раньше это работало, а я не менял код, может кто-нибудь сказать мне, почему это не работает, и, возможно, предложить некоторые изменения в коде, чтобы он снова заработал? Я был бы очень признателен!

1 ответ

Решение

Причина, по которой он не находит первое вхождение, заключается в том, что этот конкретный экземпляр имеет два пробела между border=0 а также title="...":

<img style="..." src=... width=220  border=0  title="Women Who Run With ...">

Ваш сканер ищет строку только с одним пробелом.


Лично я бы предложил рассмотреть возможность использования HTML-парсера. Это немного пугающе в первый раз, когда вы его используете, но это чрезвычайно мощный и гибкий способ синтаксического анализа HTML, который избавляет вас от множества посимвольных проверок ввода. Он предназначен именно для такой проблемы. Посмотрите TFHpple или руководство Ray Wenderlich о том, как анализировать HTML.

Другие вопросы по тегам