我对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。
我不能为我的生活理解为什么,如果我可以使用类似于不起作用的代码段的方法,那对我的应用程序来说会更实用。 如果有人能够为我阐明这个话题,或者指出我在不同的方向完成同样的任务我会非常感激!
答案 0 :(得分:0)
你的问题是“实例化”一词意味着它所说的。 : - )
在viewWillAppear
中,您正在创建一个全新的GTGiftsViewController
对象,该对象对在第一个GTGiftsViewController
对象中选择的礼物一无所知。
(执行此类操作的“故事板方式”是在第一个视图控制器中创建prepareForSegue:sender:
方法并在那里完成工作。)