- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
[self getLoadingTableCellWithTableView:tableView];
RssItemCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RssItemCell"];
// If break in here, url fetch maybe error or row is null
RssItem *feed = [[self.manager.feeds objectForKey:self.manager.currentChannel] objectAtIndex:indexPath.row];
cell.title.text = feed.title;
cell.description.text = feed.description;
cell.date.text = feed.date;
// if any image enclosure at rss parse
[cell.enclosure setImage:[UIImage imageNamed:@"logo.png"]];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue,
^{
UIImage *image = [[UIImage alloc] initWithData:feed.enclosure];
[cell.enclosure setImage:image];
[cell setNeedsLayout];
});
return cell;
}
当我尝试获取空行RSS(我的网络类别中没有帖子)时,我遇到了问题
我想显示提醒并自动转到主页。
被困在这里。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
[self getLoadingTableCellWithTableView:tableView];
RssItemCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RssItemCell"];
@try {
NSLog(@"Trying to tetch");
// If break in here, url fetch maybe error or empty row
RssItem *feed = [[self.manager.feeds objectForKey:self.manager.currentChannel] objectAtIndex:indexPath.row];
cell.title.text = feed.title;
cell.description.text = feed.description;
[cell.enclosure setImage:[UIImage imageNamed:@"logo.png"]];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue,
^{
UIImage *image = [[UIImage alloc] initWithData:feed.enclosure];
[cell.enclosure setImage:image];
[cell setNeedsLayout];
});
return cell;
}
@catch (NSException *e) {
NSLog(@"catching %@ reason %@", [e name], [e reason]);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"%@",e] delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
TableViewController *VC = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
[self presentViewController:VC animated:YES completion:nil];
}
@finally {
NSLog(@"finally");
}
}
警告不会出现并转到断点。我该如何处理这个错误?
答案 0 :(得分:2)
首先,您必须始终在cellForRowAtIndexPath:
返回UITableViewCell *。其次,这通常是一种不好的做法(请参阅下面的引文),特别是因为您可能会多次显示一些警报并显示TableViewController
。作为一个问题解决方案,似乎没有例外,这让我觉得self.manager.feeds
实际上是nil
。
您不应使用try-catch块代替标准编程 检查Objective-C方法。在NSArray的情况下,为 例如,您应该始终检查数组的计数以确定 尝试访问给定索引处的对象之前的项目数。 如果你创建一个,objectAtIndex:方法会抛出异常 越界请求,以便您可以尽早在代码中找到错误 在开发周期中 - 你应该避免抛出异常 您发送给用户的应用。
有关Objective-C应用程序中的异常的更多信息,请参阅 Exception Programming Topics