我在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];
}
我能理解为什么如果从集合视图中取消,我会得到该错误,但我无法弄清楚为什么正在发生展开。有什么想法吗?
答案 0 :(得分:0)
您可以通过在视图控制器的dealloc方法中解除弹出窗口来避免popover dealloc异常。
您的展开segue可能已在您的故事板中设置,您只需找到并删除它即可。您可以尝试在prepareForSegue:
上设置断点,以查看传入的segue对象或堆栈跟踪是否为您提供了任何线索。