我有两个TableViewControllers之间有一个segue。当用户单击第一个TVC中的单元格时,他们会看到第二个TVC。 segue是模态的,具有一个名为“segueToLocationDetails”的标识符,并将一个对象随其一起传递。您可以或多或少地将第二个TVC视为“详细信息”页面。

我的代码在上述情况下可以完美地工作。但是,一旦我将第二个TVC嵌入导航 Controller 中,它就会中断。

例子。我有完美的工作。然后,我突出显示IB中的第二个TVC,将鼠标悬停在“产品|”上。嵌入|导航 Controller 。现在,第二个TVC在导航 Controller 中。然而,segue仍然指向第二个TVC。我删除了序列号,并将其从第一个TVC单元重新连接到导航 Controller ,并确保为序列号提供一个标识符。再次运行,它就坏了!错误如下...



下面的一些代码可以帮助解释:

AllLocations.h和AllLocations.m(这是主表)

AllLocations.h

@interface AllLocations : UITableViewController
{
    SQLiteDB *mySQLiteDB;
}
@property (nonatomic, strong) NSMutableArray *locationsArray;



AllLocations.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"segueToLocationDetails" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"segueToLocationDetails"])
    {
        NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
        NSInteger rowNumber = selectedIndexPath.row;

        mySQLiteDB = (SQLiteDB *) [locationsArray objectAtIndex:rowNumber];

        DetailsTVC *detailsTVC = [segue destinationViewController];

        detailsTVC.detailsObject = mySQLiteDB;
    }
}

DetailsTVC.h和DetailsTVC.m(这是详细的表格 View )
DetailsTVC.h

@interface DetailsTVC : UITableViewController

@property (nonatomic, strong) SQLiteDB *detailsObject;


DetailsTVC.m

@implementation SpotDetailsTVC

@synthesize spotDetailsObject;

注意:我遗漏了与问题无关或无关紧要的所有代码。

再说一次:如果选择是从Origining TableVeiwController到另一个TableViewController,则此方法非常理想。仅当我将第二个TVC嵌入到Nav Controller中时,它才会中断。我需要知道如何与图片中的Nav Controller一起使用。提前致谢!

最佳答案

DetailsTVC *detailsTVC = [segue destinationViewController];
那条线是不正确的。由于您的第二个TVC现在已嵌入导航 Controller 中,因此[segue destinationViewController]现在是UINavigationController。这应该工作:
DetailsTVC *detailsTVC = [[segue destinationViewController] visibleViewController];

09-07 11:19