我将splitViewController用于iPad程序。在主视图中,这是一个tableviewController,将显示照片名称列表。当您单击其中一个照片名称时,照片将显示在详细视图中。
现在的问题是,当您第一次点击照片时,照片将正确显示;但是当你第二次在表格中选择一张照片时,程序会崩溃!
我的代码
在故事板中,我构建了一个替换segue,从主viewController到detailView Controller。在tableView:didSelectRowAtIndexPath:主视图控制器中,我写道: [self performSegueWithIdentifier:@“Photo Show”sender:self];
在prepareForSegue:sender:中,我写道: [segue.destinationViewController setCurrentPhotoInfo:self.currentPhoto];
在detailViewController中,我在setCurrentPhotoInfo中编写代码,如下所示:
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
[self.imageView setImage: image];
self.scrollView.contentSize = self.view.bounds.size;
self.scrollView.delegate = self;
[self.scrollView addSubview:self.imageView];
[self.view addSubview:self.scrollView];
崩溃信息
当程序崩溃时,我在[self performSegueWithIdentifier:@“Photo Show”sender:self]中遇到了崩溃。崩溃信息是: [PhotoShowViewController respondsToSelector:]:发送到解除分配的实例0x6c9eae0的消息。
要调试问题,我编写代码来观察目标视图控制器地址在prepareForSegue中:
id last = [self.splitViewController.viewControllers lastObject];
id destination = segue.destinationViewController;
令我惊讶的是,最后与目的地不同!我认为他们应该是一样的。 更令人惊讶的是,当您完成第一个segue并单击照片表进入第二个segue时,您会发现最后一个和目标都已更改:目标更改为新地址,最后一个等于旧目标!
崩溃地址“0x6c9eae0”只是旧的最后地址。
为什么会这样?我很困惑。