1

我对 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 返回空值。

我一生都无法理解为什么,如果我可以使用类似于不起作用的代码段的方法,这对我的应用程序来说会更实用。如果有人能为我照亮这个话题,或者为我指出不同的方向来完成相同的任务,我将不胜感激!

4

1 回答 1

0

你的问题是“实例化”这个词的意思是它所说的。:-)

viewWillAppear您创建一个全新的GTGiftsViewController对象时,它对第一个对象中选择的礼物一无所知GTGiftsViewController

(做这种事情的“故事板方式”是prepareForSegue:sender:在你的第一个视图控制器中创建一个方法并在那里完成工作。)

于 2012-05-16T21:02:47.660 回答