Ios 使用;“显示细节”;继续替换Spit view controller中的详图视图控制器

Ios 使用;“显示细节”;继续替换Spit view controller中的详图视图控制器,ios,objective-c,segue,uisplitviewcontroller,uistoryboardsegue,Ios,Objective C,Segue,Uisplitviewcontroller,Uistoryboardsegue,我正在使用带有自适应分段的通用故事板来构建我的界面。我有一个UISplitViewController,其中一个UITableViewController设置为主视图控制器。我使用此表来显示两种不同类型的信息,因此当用户点击单元格时,我需要找出他们点击的单元格,以便根据所选单元格显示两种不同视图控制器中的一种。我在故事板中设置了关系,使细节视图控制器成为两个视图控制器中的第一个,这很好,因为我始终渲染UI覆盖,直到它们点击一个单元格。我发现我可以创建一个从表视图控制器到另一个视图控制器的序列,当

我正在使用带有自适应分段的通用故事板来构建我的界面。我有一个
UISplitViewController
,其中一个
UITableViewController
设置为主视图控制器。我使用此表来显示两种不同类型的信息,因此当用户点击单元格时,我需要找出他们点击的单元格,以便根据所选单元格显示两种不同视图控制器中的一种。我在故事板中设置了关系,使细节视图控制器成为两个视图控制器中的第一个,这很好,因为我始终渲染UI覆盖,直到它们点击一个单元格。我发现我可以创建一个从表视图控制器到另一个视图控制器的序列,当点击适当的单元格时,应该显示该序列-这是一个“显示详细信息(如替换)”序列。我给了它一个标识符,只需调用
[self-performsguewithidentifier:replacetailsegueeidentifier-sender:self]选择适当的行继续并用正确的视图控制器替换详图中的现有视图控制器时。当我选择一个应该显示第二个视图控制器的单元格时,这非常有效。它正确地将第一个局部视图控制器替换为第二个视图控制器。然后我设置了另一个segue,当用户点击一行时,它将显示原始的first view控制器。但当这种情况发生时,应用程序会在执行segue的线路上崩溃(但没有任何信息记录到控制台,只是状态为EXC_BAD_ACCESS)

因此,似乎一旦您执行了一次Show detail segue,后续替换detail view控制器的调用就会使应用程序崩溃。如果我选择一行用第二个视图控制器替换原始详图控制器,然后选择另一行显示相同的第二个视图控制器,则也是如此-应用程序崩溃


我该如何设置它,使它能够根据所选单元格正确显示相应的详细视图控制器,以确保应用程序不会崩溃?我发现崩溃是由于取消分配详细视图控制器(即
UISplitViewControllerDelegate
)造成的,因此,主对象引用的对象不存在。解决方案是将代理设置为将显示的新视图控制器(如果它不符合
UISplitViewControllerDelegate
,则设置为零)。现在,它可以正常工作。

您应该像正常情况一样将序列连接到单元格选择,然后您可以确定在PrepareForegue中选择了哪个单元格,如下所示:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        ...

您是如何设置segue以转到原始细节控制器的?从哪个控制器?