尝试从 NSString 中提取图像 URL
Trying to extract an image URL from an NSString
我正在尝试为 iOS 创建一个 RSS Feed 应用程序,并且我正在尝试从 xml 文件(属于RSS 订阅)
这是我当前的代码:
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'
这是什么意思?我该如何解决这个问题?
这可能对您有帮助:
- (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;
}
您在此代码中使用 appendString:
的原因是提供的数据可能不完整(由于处理过程中的缓冲等)。在标签解析完成之前,您不应尝试处理内容。
您看到的是您的 rangeOfString:
调用不匹配任何内容和 returns 一个位置为 NSNotFound
的范围。当您尝试使用它时,您会遇到索引异常。
您应该在标记完成处理后将代码更改为 运行,以防止找不到您要查找的子字符串。
我正在尝试为 iOS 创建一个 RSS Feed 应用程序,并且我正在尝试从 xml 文件(属于RSS 订阅)
这是我当前的代码:
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'
这是什么意思?我该如何解决这个问题?
这可能对您有帮助:
- (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;
}
您在此代码中使用 appendString:
的原因是提供的数据可能不完整(由于处理过程中的缓冲等)。在标签解析完成之前,您不应尝试处理内容。
您看到的是您的 rangeOfString:
调用不匹配任何内容和 returns 一个位置为 NSNotFound
的范围。当您尝试使用它时,您会遇到索引异常。
您应该在标记完成处理后将代码更改为 运行,以防止找不到您要查找的子字符串。