我将仪表板视图控制器推入UINavigationController,仪表板视图控制器充当UICollectionView的代理。
此仪表板视图控制器上有一个后退按钮,因此当用户单击后退按钮时,用户可以返回到根视图控制器。
但是,我有一些代码会对UICollectionView进行批量更新,但是当用户在块执行之前非常快地单击后退按钮时,仪表板视图控制器将被释放,因此我崩溃了。
日志表明它在if (weakSelf.ChartCollection.delegate)
处中断,因为weakSelf.ChartCollection.delegate
已取消分配。
如果在另一个块尝试访问视图控制器时取消分配视图控制器,我该如何避免?
PS:禁用后退按钮不是一个选项。
日志:
*** -[DashboardViewController retain]: message sent to deallocated instance 0x14ef57360
* thread #1: tid = 0x1bb9b, 0x0000000184a72440 CoreFoundation`___forwarding___ + 968, queue = 'com.apple.main-thread', stop reason = EXC_BREAKPOINT (code=1, subcode=0x184a72440)
frame #0: 0x0000000184a72440 CoreFoundation`___forwarding___ + 968
frame #1: 0x0000000184976b6c CoreFoundation`_CF_forwarding_prep_0 + 92
* frame #2: 0x000000010015b248 line 168: if (weakSelf.ChartCollection.delegate && weakSelf.DashboardModel.chartArray.count > 0) {
代码: 在我的UICollectionView的reloadDashBoardData中,weakSelf是一个自定义View容器,它有UICollectionView对象:
dispatch_async(dispatch_get_main_queue(), ^{
if (weakSelf.ChartCollection) {
if (weakSelf.ChartCollection.delegate && weakSelf.DashboardModel.chartArray.count > 0) {
[weakSelf.ChartCollection performBatchUpdates:^{
[UIView performWithoutAnimation:^{
CLS_LOG(@"chart collection delegate:%@",weakSelf.ChartCollection.delegate);
[weakself.ChartCollection reloadItemsAtIndexPaths:@[path]];
}];
} completion:nil];
}
}
答案 0 :(得分:0)
在你的视图中使用控制器dealloc,nil你的collectionView委托。我相信问题出在CollectionView的assign属性中。