tableView:didSelectRowAtIndexPath:不一致

时间:2012-05-16 20:54:54

标签: objective-c ios tableview viewwillappear

我对Objective-C和iOS应用程序开发相当新,所以如果我的问题的答案很简单,我会道歉。我正在尝试将一个GTGift对象的指针从一个视图控制器发送到另一个视图控制器。当我输入以下代码时,对象将被发送并存储在第二个视图控制器的实例变量中:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    GTGift *selectedGift = [[[GTGiftStore sharedStore] allGifts] objectAtIndex:[indexPath row]];
    GTDetailViewController *dvc = [[self storyboard] instantiateViewControllerWithIdentifier:@"detailVC"];
    [dvc setDetailGift:selectedGift];
    [[self navigationController] pushViewController:dvc animated:YES];
}

但是,当我在第一个视图控制器中输入此代码时:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    gift = [[[GTGiftStore sharedStore] allGifts] objectAtIndex:[indexPath row]];
    GTDetailViewController *dvc = [[self storyboard] instantiateViewControllerWithIdentifier:@"detailVC"];
    [[self navigationController] pushViewController:dvc animated:YES];
}

这个代码在第二个视图控制器中:

- (void)viewWillAppear:(BOOL)animated {
    GTGiftsViewController *gvc = [[self storyboard] instantiateViewControllerWithIdentifier:@"giftsVC"];
    detailGift = [gvc gift];
    NSLog(@"%@", detailGift);
}

detailGift返回null。

我不能为我的生活理解为什么,如果我可以使用类似于不起作用的代码段的方法,那对我的应用程序来说会更实用。 如果有人能够为我阐明这个话题,或者指出我在不同的方向完成同样的任务我会非常感激!

1 个答案:

答案 0 :(得分:0)

你的问题是“实例化”一词意味着它所说的。 : - )

viewWillAppear中,您正在创建一个全新的GTGiftsViewController对象,该对象对在第一个GTGiftsViewController对象中选择的礼物一无所知。

(执行此类操作的“故事板方式”是在第一个视图控制器中创建prepareForSegue:sender:方法并在那里完成工作。)