2009-12-11 67 views
2

我想要一個數組從一個類中獲取數據,以便在具有相同數據的另一個類中對我有效。
如果我們在applicationDelegate類上聲明一個數組。
然後在兩個類中聲明applicationDelegate的一個對象。
並將數組從一個類分配到appDelegate.array,我將能夠獲得跨類的數組?如何在兩個類之間共享數組?

回答

2

我與邁克。離開App Delegate。

你在控制何時以及如何實現對象。在創建相關類的實例時,如果多個類能夠訪問相同的數據,交出數據或獲取數據的方法很重要。

一個例子,給出類WVParent和WVChild。

WVParent有一個屬性,的someArray,這是陣列的其他對象需要:

@interface WVParent : NSObject { 

NSArray *someArray 

} 
@property (nonatomic, retain) NSArray *someArray; 

@end 

然後你有WVChild,它本身有一個名爲parentObject屬性:

@class WVParent; 

@interface WVChild : NSObject { 

WVParent *parentObject; 

} 
@property (nonatomic, assign) WVParent *parentObject; 

@end 

假設父正在創建子實例,您將分配它並分配父代:

WVChild *child = [[WVChild alloc] init]; 
child.parentObject = self; 

那麼孩子實例可以通過訪問的someArray:

self.parentObject.someArray 

這僅僅是一個選項。您也可以將數組本身傳遞給孩子,假設數據是靜態的,並且在應用程序會話過程中不太可能發生變化。

通過這種方式,我們不再需要在App Delegate中存在數據源,而是生活在一個更適合其創建,維護和自動售貨的類中。如果您的課程已經存在並且只能通過獲得應用程序委託才能訪問其他應用程序,那麼您可能需要考慮一下您的架構。

更多的依賴注入這裏:

http://en.wikipedia.org/wiki/Dependency_injection

+0

我「失蹤」在child.parentObject:self; – 2011-03-21 07:26:52

+0

這真是愚蠢的我。該:應該是一個=符號。固定。 – 2011-03-21 20:21:43

+0

謝謝:)好吧,我明白了,但很高興看到我做了正確的事情...... – 2011-03-21 22:28:23

1

是的,你可以在你的applicationDelegate類中聲明一個成員/屬性,儘管你應該嘗試遵循單一責任原則,並確保你不會在你的應用程序委託中填充大量其他共享的東西(這會發生很多與iPhone代碼)。

另一種方法是在創建對象的構造函數時將數組注入到對象的構造函數中。

很難知道設計方面的最佳解決方案,而不知道這些數據是什麼以及它的真正屬性。

+0

我試圖用一個正常的變量。但即使它不工作。 – wolverine 2009-12-11 13:26:28

相關問題