【发布时间】:2013-06-04 00:17:10
【问题描述】:
我有一个带有初始图像的表格视图的视图控制器。 我正在使用 AFNetworking 加载图像,有时(主要是在我的互联网连接速度较慢时)当我单击视图控制器中的后退按钮项并进入 rootviewcontroller 时,应用程序崩溃并且我收到以下消息:
-[__NSCFDictionary numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x1f567e30
为什么? 我正在使用 ARC。 这是我加载图片的代码
if(item.thumb)
{
[cell.listItemImage setImage: item.thumb];
}
else
{
UIActivityIndicatorView *loadingSymbol = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleGray];
loadingSymbol.frame = CGRectMake(0, 0, cell.listItemImage.frame.size.width, cell.listItemImage.frame.size.height);
[cell.listItemImage addSubview: loadingSymbol];
[loadingSymbol startAnimating];
[cell.listItemImage setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString: item.thumbUrl]]
placeholderImage:[UIImage imageNamed:@"transparent.png"]
success:^(NSURLRequest *request , NSHTTPURLResponse *response , UIImage *image )
{
item.thumb = image;
[cell setNeedsLayout];
[loadingSymbol removeFromSuperview];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
{
NSLog(@"something went wrong wiv the images");
NSLog(@"%@", error);
//[loadingSymbol removeFromSuperview];
}
];
}
}
如果有人可以在这里帮助我,我会很高兴!
编辑:
解决了我的第一个问题。但是现在,当我在表格视图中滚动时,应用程序崩溃了。我认为这与以下行有关:
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
任何想法为什么?
【问题讨论】:
-
根据错误消息,您设法将 NSDictionaryObject 分配给框架需要表委托的某些属性。
-
所以当表格视图控制器已经发布但后台仍有数据加载时会发生这种情况。显然,您保留了对不应再存在的单元格对象的引用。单元本身可能仍然存在,因为 ARC 取决于这是强引用还是弱引用。
-
我不确定。 '[cell setNeedsLayout]' 是否会导致在表格或其控制器不再存在时重绘单元格和表格?但是,您应该找到一些更聪明的解决方案。要么在返回时取消所有打开的请求,要么在相关视图不再可见/不存在时不处理数据。
-
嗯,我回去后如何取消打开的请求?
-
你没有使用
UIImageView+AFNetworking吗?
标签: ios objective-c tableview afnetworking