你想要做的是在你的主视图控制器中添加一个Cocoa property,它引用了你想与下级视图控制器共享的对象实例。
例如,如果我们想分享一个NSArray
,我们在主视图控制器标头中指定其属性:
@interface MainViewController : UIViewController {
NSArray *myArray;
}
@property (nonatomic, retain) NSArray *myArray;
@end
在实施中,添加@synthesize
指令,并记得release
在-dealloc
数组:
@implementation MainViewController
@synthesize myArray;
...
- (void) dealloc {
[myArray release];
[super dealloc];
}
@end
您还想要以完全相同的方式添加此属性以查看从属于主视图控制器的控制器。在它们的标题中,指定相同的变量名称和属性描述。
在您的主视图控制器,当你准备推一个下属视图控制器,你因此只需按下之前设置下级视图控制器的属性:
- (void) pushSubordinateViewController {
SubordinateViewController *subVC = [[SubordinateViewController alloc] initWithNibName:@"SubordinateViewController" bundle:nil];
subVC.myArray = self.myArray; // this sets the sub view controller's myArray property
[self.navigationController pushViewController:subVC animated:YES];
[subVC release];
}
同样,在你的下属视图控制器,它将需要相应地设置其下属的数组属性,就在它推动其自己的子子视图控制器之前。
通过以这种方式设置引用,每个视图控制器指向相同的数组,包含所需的元素。
要使用该阵列,请致电self.myArray
,例如, [self.myArray objectAtIndex:index]
在给定索引处获取对象。
这确实清除了如何在视图控制器之间共享数据,谢谢。我仍然不清楚(即使阅读Apple的文档)是使用协议。具体而言,如果您使用Xcode“实用程序应用程序”模板创建应用程序,那么这些行会让我感到困惑: @protocol FlipsideViewControllerDelegate; @interface FlipsideViewController:UIViewController { \t id delegate; } 我不明白为什么这个委托变量设置。它看起来像用于提交/解散反面视图。 –
Ian
2009-09-21 23:30:35
我还没有读过你在帖子中提到过的第六章。但我可以猜测 - 很可能委托设置,以便FlipsideViewController可以发信号给它的父母(我。在FlipsideViewController之前的视图控制器) – dotnetcoder 2013-05-31 18:27:43