簡體   English   中英

嘗試從NSString提取圖像URL

[英]Trying to extract an image URL from an NSString

我正在嘗試制作適用於iOS的RSS Feed應用程序,並且試圖從xml文件(RSS feed的)的描述標簽中獲取圖像URL。

這是我當前的代碼:

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);
    }
}

我的應用程序崩潰了,我在崩潰日志中得到了這個:

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

這意味着什么? 我怎樣才能解決這個問題?

在此代碼中使用appendString:的原因是,提供的數據可能不完整(由於在處理過程中存在緩沖等原因)。 在標記解析完成之前,您不應嘗試處理內容。

您看到的是您的rangeOfString:調用與任何內容都不匹配,並返回了一個位置為NSNotFound的范圍。 當您嘗試使用它時,您將獲得索引異常。

您應該更改代碼以在標記完成處理后運行,並防止找不到所需的子字符串。

這可以幫助您:

- (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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM