2013-02-09 102 views
0

我有一個由更多子陣列組成的陣列我在哪裏初始化NSMutable Dictionary?

我想顯示一個子數組的內容摘要到一個TableView與每個條目的出現次數。我已經確定最好和最簡單的方法是通過NSMutableDictionary作爲中間步驟。

我宣佈字典我在執行

@implementation ReviewViewController 
{ 
NSMutableDictionary *dict; 
} 

,並倒在我的方法,我初始化和使用它像這樣:

dict = [NSMutableDictionary new]; 
[dict setObject:[Observation entryCount] forKey:[observedItem species]]; 

鍵和對象的交換是經過深思熟慮的,作爲其計數我想要。我正在使用值保留的事實,但密鑰被覆蓋,所以如果我交換他們,我得到免費的curation。

It works !,但每次調用該方法時,字典都會被重新初始化所破壞,所以我只能得到最後輸入的內容。任何地方,它都不在範圍之內。

如果我將它作爲方法名稱中的一個參數傳遞,我會得到消息「本地聲明'dict'隱藏實例變量」。該代碼已經是一組不可分割的一組部件,所以

所以,哪裏是實例的正確位置?

我很想在這裏作出我的貢獻,作爲一個有意義的感謝,但在我能做到這一點之前,我會看起來很愚蠢的這樣的問題。

+0

什麼在[觀察物種]? – Rajneesh071 2013-02-09 11:48:34

回答

0

您通常會在您的init方法中初始化它。對於一個視圖控制器,這通常是如下:「在別的地方,它超出範圍」

- (id)initWithNibName:(NSString*)nibName bundle:(NSBundle*)bundle { 
    if ((self = [super initWithNibName:nibName bundle:bundle])) { 
     dict = [NSMutableDictionary new]; 
    } 
    return self; 
} 

我不明白你的意思。這是一個實例變量。因此,它在任何方法的範圍內。順便說一下,我會用下劃線前綴命名實例變量,例如: _dict。這是常用的約定,它可以幫助您記住使用它時它是一個實例變量。

+0

謝謝。與此同時,最簡單的地方,ViewDidLoad,做了訣竅,但如果initWithNibName是更傳統的。我認爲強調只用於強制合成財產。生活和學習,我只是住在兩個人。 – aremvee 2013-02-09 20:58:38

+0

'viewDidLoad'並不是一個不好的地方。這完全取決於該對象的生命週期。如果它在'viewDidLoad'中,則每次加載視圖時,字典將被初始化爲一個新的,空的。這可能是你想要的,或者它可能不是。 – mattjgalloway 2013-02-09 21:04:40

相關問題