我正在开发一个主详细信息应用程序,在tableView中进行选择后重新加载我的webview时出现问题。我倾向于认为这个问题在我的NSURL任务中非常简单。以下是相关代码。
这个功能在我的主视图中;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UGStory *detailStory = [_ugFeed.stories objectAtIndex:indexPath.row];
[_detailViewController displayMaster:detailStory.url];
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}
这个是在详细视图中
- (void) displayMaster:(NSURL *)urlToLoad
{
NSURLRequest *requestObj = [NSURLRequest requestWithURL:urlToLoad];
[_webView loadRequest:requestObj];
}
这就是设置NSURL的地方
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (_read == YES)
{
if ([elementName isEqualToString:@"title"]) {
UGStory* temp = [_stories objectAtIndex:_i];
temp.title = _currentTag;
}
if ([elementName isEqualToString:@"link"]) {
UGStory* temp = [_stories objectAtIndex:_i];
temp.url = [NSURL URLWithString:_currentTag];
_read = NO;
_i++;
}
}
_currentTag = nil;
return;
}
我怀疑我的temp.url分配没有按预期工作。我已经使用NSLog打印了_currentTag,它在发生时保持正确的值。
url被声明为一个强大的非原子属性。当我执行这个时,所有这些函数都被调用,但是在执行displayMaster函数之后,WebView的内容不会改变。
编辑:我删除了一些OP,因为我已经清楚地确定了导致问题的代码行。它是didEndElement中的URL赋值,URLWithString返回nil。if ([elementName isEqualToString:@"link"]) {
NSLog(@"urlString = %@", _currentTag);
temp.url = [NSURL URLWithString:_currentTag];
NSLog(@"url = %@, %@", temp.url, [temp.url absoluteString]);
_read = NO;
_i++;
}
对于我的数组中的每个对象,我的日志中的输出如下所示。
2012-01-07 20:14:22.971 MusicNews [1162:f803] urlString = http://www.ultimate-guitar.com/news/general_music_news/30_seconds_to_mars_no_plans_to_split.html 2012-01-07 20:14:22.982 MusicNews [1162:f803] url =(null),(null) 2012-01-07 20:14:22.982 MusicNews [1162:f803] urlString = http://www.ultimate-guitar.com/news/upcoming_releases/kiss_two_days_from_finishing_new_album.html 2012-01-07 20:14:22.983 MusicNews [1162:f803] url =(null),(null)
任何人都可以解释为什么URLWithString在这里不起作用吗?