从TableViewController中的performSegueWithIdentifier到NavController中嵌入的第二个TVC无法正常工作

Ela*_*hts 6 cocoa objective-c uinavigationcontroller ios segue

我有两个TableViewControllers,中间有一个segue.当用户点击第一个TVC中的小区时,他们将看到第二个TVC.segue是模态的,有一个名为"segueToLocationDetails"的标识符,并传递一个对象.您或多或少可以将第二个TVC视为"详细信息"页面.

我的代码在我上面描述的场景中完美运行.然而,只要我将第二个TVC嵌入导航控制器,它就会中断.

例.我有完美的工作.然后我突出显示IB中的第二个TVC,将鼠标移到Product | 嵌入| 导航控制器.现在第二个TVC在导航控制器中.然而,segue仍然指向第二个TVC.我删除了segue并将其从第一个TVC的单元重新连接到导航控制器,并确保给segue一个标识符.再次跑,它打破了!错误低于......

2011-12-23 15:30:45.469 Project12 [5219:11603] - [UINavigationController setDetailsObject:]:无法识别的选择器发送到实例0x7b92ce0 2011-12-23 15:30:45.471 Project12 [5219:11603] *终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因是: ' - [UINavigationController的setDetailsObject:]:无法识别的选择发送到实例0x7b92ce0'*第一掷调用堆栈:(0x16ea052 0x150ad0a 0x16ebced 0x1650f00 0x1650ce2 0x3933 0x703e1e 0x36f6d9 0x36f952 0xbf786d 0x16be966 0x16be407 0x16217c0 0x1620db4 0x1620ccb 0x14ec879 0x14ec93e 0x2dfa9b 0x2a98 0x29f5 0x1)终止调用抛出异常当前语言:auto; 目前客观的c

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

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;        
    }
}
Run Code Online (Sandbox Code Playgroud)

详情TVC.h&DetailsTVC.m(这是详细的表格视图)

DetailsTVC.h

@interface DetailsTVC : UITableViewController

@property (nonatomic, strong) SQLiteDB *detailsObject;


DetailsTVC.m

@implementation SpotDetailsTVC

@synthesize spotDetailsObject;
Run Code Online (Sandbox Code Playgroud)

注意:我遗漏了与问题不重要或不相关的所有代码.

再次:如果segue从Originating TableVeiwController转到另一个TableViewController,这将完美地工作.它只会在我将第二个TVC嵌入导航控制器时中断.我需要知道如何在图片中使用Nav Controller.提前致谢!

Sco*_*ets 11

DetailsTVC *detailsTVC = [segue destinationViewController];

那条线是不正确的.由于您的第二个TVC现在嵌入在导航控制器中,[segue destinationViewController]现在是一个UINavigationController.这应该工作:

DetailsTVC *detailsTVC = [[segue destinationViewController] visibleViewController];