2011-07-05 110 views
2

我想要一些幫助,因爲我想找到一個好的方法來發佈一個NSMutableArray到另一個類。發送NSMutableArray到一個UIViewController

所以我有一個NSMutableArray一個UIViewController

例如(如果用戶選擇從RootViewController的一個細胞,其是推動)

代碼在RootViewController的當用戶選擇一個小區:

QueryTableViewController *queryTableView 
     = [[QueryTableViewController alloc] initWithQuery:query]; 
[self.navigationController pushViewController:queryTableView animated:YES]; 
[queryTableView release]; 

代碼在QueryTableViewController

@interface QueryTableViewController : UIViewController{ 
NSMutableArray *results; 
} 

@implementation QueryTableViewController // more code 
-(int)fetchQueryWithString:(NSString*)string{ 
    // Searching twitter. 
    // add objects in the results array. 
    // **HERE** Once I gather all the objects I am posting a notification: 
} 

在另一側我有DetailViewController裏面是空的,並且需要在陣列創建另一個的UIViewController和添加子視圖。 例如

// when the notification is received 
self.statsTableView = [[StatsTableVC alloc] initWithTweets:**HERE**]; 
[self addSubView:self.statsTableView]; 

目前我在fetchQueryWithString方法結束旨意通知共享陣列。我想知道是否有更好的方法將它發送到另一個UIViewController?

(我敢肯定有;)

在此先感謝。

回答

0

有兩種方法對多個視圖控制器之間的數據處理。

首先,存在依賴注入,它只是簡單地將引用傳遞給控制器​​之間的數據存儲對象。由於對象是通過引用傳遞的,因此可以在一個控制器中修改數據對象,使數據出現在另一個控制器中。

就你而言,你的數據對象只是一個可變數組。您將定義一個屬性來保存將使用它的每個視圖控制器中的數組。因此,在您的RootViewController中,您將定義一個NSMutableArray屬性,創建一個空數組,然後在加載時將其傳遞給下一個視圖控制器。

QueryTableViewController *queryTableView 
     = [[QueryTableViewController alloc] initWithQuery:query]; 
queryTableView.results=self.queryResults; 
[self.navigationController pushViewController:queryTableView animated:YES]; 
[queryTableView release]; 

由於RootViewController實例和QueryTableViewController實例共享對相同可變數組的引用,每個作爲訪問由其他的修改。

依賴注入具有前端簡單的優點。但是,它具有將所有視圖控制器對數據的訪問綁定到一個嚴格的層次結構中的缺點。如果您在視圖層次結構中移動視圖控制器,添加或刪除視圖控制器或將視圖控制器移動到另一個應用程序,則可能必須重寫所有視圖的數據處理。

第二種方法使用僞單體使數據對象可在應用程序的任何位置訪問。該應用程序是一個單身人士,因此,使應用程序有效地委派一個單身人士。

隨時隨地獲取應用程序委託的應用程序:

AppDelegateClassName *appDelegate=(AppDelegateClassName *)[[NSApplication sharedApplication] delegate]; 

......那麼,是指應用程序委託的任何財產:

NSMutableArray *localResults=appDelegate.results; 

該系統的優勢在於,它使視圖控制器彼此獨立。您可以輕鬆移動它們,甚至將它們移動到其他應用程序。

+0

感謝您的信息。將detailViewController設置爲單例並設置數組會是不好的選擇嗎? – PatrickG4

+0

是的,沒有理由讓任何控制器成爲單身人士。控制器始終根據其特定的視圖和數據模型進行定製。因此,使一個人成爲一個單身人士是毫無意義的。控制器在Apple API採用的Model-View-Controller設計中不包含任何重要數據。他們應該簡單地引用一個數據模型對象,該對象可以是簡單數組,自定義對象或(最重要的)核心數據堆棧中的任何數據模型對象。 – TechZen

+0

我創建了一個Repository對象作爲單例以在單獨的控制器上使用該數組。再次感謝。 – PatrickG4

0

如果它的可在您的應用程序的多個類中共享,則可以使您的array可通過singleton class獲得。

因此,你的單身人士課程將舉行NSMutableArray實例,並通過一些getter函數使其他人可用。

0

以下步驟使用在另一個類A中創建的類B上的數組。

在A類的實現文件,上面@implementation,聲明一個數組,像這樣:

NSArray *array; 
@implementation 

...在你的方法,你充滿了你的NSMutableArray的可變數組分配給該陣列,如:

現在
array = arrMutable; 

,在B類以上@implementation的extern它像

extern NSArray *array; 
@implementation 

現在你有你的alll數組,在nsmutable陣列

希望它可以幫助...........中的元素

0

請導入appdelegate .h文件,在哪個類中使用nsmutuable數組。 然後在appdelegate類的nsmutable數組中定義屬性。

然後你想要使用哪個類數組。

[yourappdelegateclass sharedinstance].appdelegatearray = yourarray; 
相關問題