认为没有将数据传递到目的地

时间:2013-10-14 15:58:56

标签: ios objective-c xcode ios6 uistoryboardsegue

我有两个表视图控制器,一个包含所有美国状态,另一个显示所选状态的数据列表。我在视图控制器(不是单元格)的主故事板中设置了一个segue,并给它一个标识符。由于超出本文范围的原因,我需要以编程方式执行segue而不使用prepareForSegue方法。

源表视图控制器(AllStatesTableViewController)需要在tableview的didSelectRowAtIndexPath方法中执行segue。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    stateID = [statesDict objectForKey:cell.textLabel.text];

    DetailTableViewController *destination = [[DetailTableViewController alloc] init];

    stateGauges = [[GaugeList alloc] initWithStateIdentifier:stateID andType:nil];
    // at this point stateGauges is NOT nil

    [destination setStateGauges:stateGauges];

    [self performSegueWithIdentifier:@"sgShowStateDetail" sender:self];
}

segue按预期执行,因为它导航到目标,但stateGauges在目标表视图控制器中为nil。它在源表视图控制器中不是nil。 stateGuages在DetailTableViewController中声明为属性。显然我做错了什么。有什么建议吗?

谢谢! V

2 个答案:

答案 0 :(得分:4)

在你的故事板上,你需要选择将你的segue从你的牢房中推出。

enter image description here enter image description here

并使用您的prepareForSegue传递数据:

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

        // Pass data here
        destViewController.stateGauges = stateGauges;
    }
}

查看here了解更多信息

答案 1 :(得分:1)

我之前也碰到了这个。我发现当我让故事板处理segue时,它会实例化一个新的视图控制器。这就是stateGauges为零的原因,因为您在编程创建的视图控制器中设置了stateGauges,而不是故事板创建的视图控制器。如果您不能使用prepareForSeque,请将您的AllStatesViewController中的segue移到Storyboard中的DetailTableViewController。然后以编程方式实例化故事板,视图控制器,setGauges,然后呈现您的视图控制器。另外,请确保放置" ShowStateDetail"在"故事板ID"在标识部分中,在故事板中的DetailTableViewController上的字段。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    stateID = [statesDict objectForKey:cell.textLabel.text];

    DetailTableViewController *destination = [[UIStoryboard storyboardWithName:@"yourStoryBoardName" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"ShowStateDetail"];

    stateGauges = [[GaugeList alloc] initWithStateIdentifier:stateID andType:nil];

    [destination setStateGauges:stateGauges];

    [self presentViewController:destination animated:YES completion:nil];
}