2009-09-18 28 views
1

我的應用程序有一個主屏幕,用戶總是從中啓動,並從中以編程方式顯示其他視圖。我按照「開始iPhone開發」中的方法設置應用程序。 6,這是使用加載在其他視圖控制器中的RootViewController。管理多個視圖控制器和數據

本書使用一個按鈕來觸發加載下一個視圖控制器,但在我的應用程序中,我需要在函數調用結束時交換控制器,並在視圖之間共享數據(處理UIImages等)。我沒有使用標籤欄或導航控制器。

我想知道的是,我應該從那裏做我的MainViewController根控制器和presentModalViewControllers?我想保留根模型,但我不太明白如何將它掛鉤並共享數據。我見過提及使用協議和通知的帖子,但我還沒有將自己的頭圍繞在它周圍。任何建議表示讚賞。

回答

1

你想要做的是在你的主視圖控制器中添加一個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]在給定索引處獲取對象。

+0

這確實清除了如何在視圖控制器之間共享數據,謝謝。我仍然不清楚(即使閱讀Apple的文檔)是使用協議。具體而言,如果您使用Xcode「實用程序應用程序」模板創建應用程序,那麼這些行會讓我感到困惑: @protocol FlipsideViewControllerDelegate; @interface FlipsideViewController:UIViewController { \t id delegate; } 我不明白爲什麼這個委託變量設置。它看起來像用於提交/解散反面視圖。 – Ian 2009-09-21 23:30:35

+0

我還沒有讀過你在帖子中提到過的第六章。但我可以猜測 - 很可能委託設置,以便FlipsideViewController可以發信號給它的父母(我。在FlipsideViewController之前的視圖控制器) – dotnetcoder 2013-05-31 18:27:43

相關問題