UICollectionView的弹出视图导致放松

时间:2014-03-01 20:53:30

标签: ios uicollectionview uipopovercontroller

我在UICollectionView中显示了一个数据矩阵(播放器)。我希望当用户触摸单元格时,在弹出视图中显示玩家的详细信息。我asked this question earlier并让它发挥作用。但从那以后,出现了一个奇怪的问题。

当我触摸一个单元格时,弹出窗口出现,但是主视图展开两个屏幕(!?)并且应用程序因此错误而崩溃:'由于未捕获的异常而终止应用程序'NSGenericException',原因:' - 当弹出窗口仍然可见时,[UIPopoverController dealloc]到达。“

playerDataView内置于故事板中。我已将playerDataView控制器和popover视图控制器声明为其头文件中集合视图的属性:

@property (strong, nonatomic) UIPopoverController *playerDataPopover;
@property (strong, nonatomic) SWSPlayerDataViewController *playerDataView;

这是实例化popover的代码:

- (IBAction)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0 || indexPath.section == 0) {  // Ignores user selecting row or column headers that I've placed in the collection view data
        return;
    }
    [self.collectionView deselectItemAtIndexPath:indexPath animated:NO];
    CGRect anchorRect = [collectionView layoutAttributesForItemAtIndexPath:indexPath].frame;
    self.playerDataView = [self.storyboard instantiateViewControllerWithIdentifier:@"playerDataView"];
    self.playerDataView.player = self.players[indexPath.section][indexPath.row]; // Sets player data in popover view.
    self.playerDataPopover = [[UIPopoverController alloc] initWithContentViewController:self.playerDataView];
    [self.playerDataPopover presentPopoverFromRect:anchorRect inView:self.collectionView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

我能理解为什么如果从集合视图中取消,我会得到该错误,但我无法弄清楚为什么正在发生展开。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以通过在视图控制器的dealloc方法中解除弹出窗口来避免popover dealloc异常。

您的展开segue可能已在您的故事板中设置,您只需找到并删除它即可。您可以尝试在prepareForSegue:上设置断点,以查看传入的segue对象或堆栈跟踪是否为您提供了任何线索。