2016-01-02 4 views
0

Я пытаюсь сделать приложение RSS-Feed для iOS, и я пытаюсь получить URL-адрес изображения из тега описания XML-файла (из RSS-канала)Попытка извлечь URL-адрес изображения из NSString

Вот мой текущий код:

static NSMutableString *title; 
static NSMutableString *linkPost; 
static NSMutableString *descriptionPost; 
static NSString *element; 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 

    if ([element isEqualToString:@"title"]) { 
     [title appendString:string]; 
    } else if ([element isEqualToString:@"link"]) { 
     [linkPost appendString:string]; 
    } else if ([element isEqualToString:@"description"]) { 
     [descriptionPost appendString:string]; 
     NSString *imgURL = descriptionPost; 
     imgURL = [imgURL substringFromIndex:[imgURL rangeOfString:@"src="].location+[@"src=" length]+1]; 
     imgURL = [imgURL substringToIndex:[imgURL rangeOfString:@"alt="].location-2]; 
     NSLog(@"log: imgURL = %@",imgURL); 
    } 
} 

Мой сбой приложения, и я получаю это в crashlog:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSCFString substringFromIndex:]: Index 9223372036854775812 out of bounds; string length 1' 

что это значит? Как я могу это исправить?

+0

вы можете написать 'описание' здесь –

+0

' описание' никогда не то же самое. Более того, у него может быть URL-адрес изображения, и он может не иметь URL-адрес изображения. – Ziph0n

ответ

-1

Это может помочь вам:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSString *description = @"<p>The post <a rel=\"nofollow\" href=\"http://www.raywenderlich.com/123606/video-tutorial-adaptive-layout-part-8-conclusion\">Video Tutorial: Adaptive Layout Part 8: Conclusion</a> appeared first on <a rel=\"nofollow\" href=\"http://www.raywenderlich.com\">Ray Wenderlich</a>.</p>"; 

    NSString *url = [self extractFromString:description start:@"href=\"" end:@"\">"]; 
    NSLog(@"%@",url); 


} 

-(NSString*)extractFromString:(NSString*)string start:(NSString*)start end:(NSString*)end{ 

    NSRange r1=[string rangeOfString:start]; 
    NSRange r2 = [string rangeOfString:end]; 
    NSRange rSub = NSMakeRange(r1.location + r1.length, r2.location - r1.location - r1.length); 

    NSString *extractedString=[string substringWithRange:rSub]; 
    return extractedString; 
} 
+0

Получил его, чтобы работать благодаря вашему ответу! Спасибо! – Ziph0n

1

Причина вы используете appendString: в этом коде является то, что в нем данные могут быть неполными (из-за буферизации и такие во время обработки). Пока синтаксический анализ тега не будет завершен, вы не должны пытаться обрабатывать содержимое.

Что вы видите, так это то, что ваш вызов rangeOfString: ничего не соответствует и возвращает диапазон с адресом NSNotFound. Когда вы пытаетесь использовать это, вы получаете исключение индекса.

Вы должны изменить свой код для запуска, когда тег завершил обработку, и для защиты от поиска нужной подстроки.

+0

Вы правы. Я помещаю свой код в другое место, и теперь он работает. Теперь мне интересно, где я могу поместить свой код, чтобы избежать этого. Благодаря! – Ziph0n

 Смежные вопросы

  • Нет связанных вопросов^_^