你想要做的是在你的主視圖控制器中添加一個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