1

我将 splitViewController 用于 iPad 程序。在作为 tableviewController 的主视图中,将显示照片名称列表。当您单击其中一张照片名称时,该照片将显示在详细视图中。

现在的问题是,当您第一次单击照片时,照片将正确显示;但是当你第二次在表格中选择一张照片时,程序就会崩溃!

我的代码

在情节提要中,我构建了一个从主视图控制器到详细视图控制器的替换序列。在主视图控制器的 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时,你会发现last和destination都变了:destination换了一个新的地址,last等于旧的destination

崩溃地址“0x6c9eae0”只是旧的最后一个地址。

为什么会这样?我很困惑。

4

0 回答 0