0

我正在尝试为 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'

这意味着什么?我怎样才能解决这个问题?

4

2 回答 2

1

您在此代码中使用的原因appendString:是提供的数据可能不完整(由于处理过程中的缓冲等)。在标签解析完成之前,您不应尝试处理内容。

您看到的是您的rangeOfString:调用不匹配任何内容并返回一个位置为NSNotFound. 当您尝试使用它时,您会得到一个索引异常。

You should change your code to run when the tag has completed processing and to protect against not finding the substring you're looking for.

于 2016-01-02T12:34:49.020 回答
-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;
}
于 2016-01-02T12:31:35.613 回答