您要做的是在您的主视图控制器中添加一个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] 获取给定索引处的对象。