执行重新加载时取消分配UICollectionView Delegate

时间:2015-02-25 07:20:37

标签: ios objective-c

我将仪表板视图控制器推入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];
                }
            }

1 个答案:

答案 0 :(得分:0)

在你的视图中使用控制器dealloc,nil你的collectionView委托。我相信问题出在CollectionView的assign属性中。