2013-06-25 41 views
1

出於某種原因,我無法將數組添加到nsmutableDictionary中。我把它宣佈爲在我的.h文件中的屬性:iOS:NSMutableDictionary propery不會設置

@interface TCMExhibitFeedStore : NSObject 

@property (nonatomic, strong) NSMutableDictionary *allLevels; 
@property (nonatomic, strong) NSMutableDictionary *storedLevels; 

+ (TCMExhibitFeedStore *)sharedStore; 

- (void)fetchExhibtFeedWithCompletion:(void (^)(NSMutableDictionary *obj, NSError *err))block; 
- (TCMLevel *)createLevel:(TCMLevelRemote *)l; 
- (TCMExhibit *)createExhibit:(TCMExhibitRemote *)e; 

- (BOOL)saveChanges; 

@end 

然後,我想一個空數組中的.m文件添加到它的功能,這樣

[_storedLevels setObject:[[NSMutableArray alloc] init] forKey:@"levels"]; 

但是,當我通過應用程序時,這永遠不會被添加。看調試器顯示爲

_storedLevels NSMutableDictionary * 0x00000000 

NSMutableDictionaries對我來說並不新鮮。我只是有點瘋狂,試圖找到我的錯誤,因爲這一切對我來說都很正常。

+0

上面一行嘗試將可變數組設置爲字典_storedLevels中的鍵「levels」的值。然而,它失敗了,因爲_storedLevels是零,從未被初始化過。 (請注意,在調試時嘗試「將菊花鏈」語句連接在一起是非常愚蠢的,特別是如果您不真正瞭解自己在做什麼,請對每條語句執行一個操作,並將每條語句放在一個單獨的行中。) –

回答

4

以下行讓我困惑...

[_storedLevels setObject:[[NSMutableArray alloc] init] forKey:@"levels"]; 

代替以上使用的:

self.storedLevels = [[NSMutableDictionary alloc] init]; 
[self.storedLevels setObject:... forKey:@"levels"]; 

注意:每當你看到0x00000000

這意味着您的對象不是alloc -ated。

因此,您需要在爲它們設置任何數組/值之前,先對它們進行alloc + init操作。

+0

謝謝。我知道這是我錯過的一些世俗的細節。 – LoneWolfPR

+0

@LoneWolfPR - 完全不「普通」 - 理解初始化非常關鍵。 –

2

0x00000000表示nil。 Objective C對象的所有屬性和實例變量都初始化爲零。因此,我們可以說,你從來沒有初始化你的屬性。

您可以初始化指定初始化程序中的字典TCMExhibitFeedStore。 (或者你訪問之前加元)

self.storedLevels = [NSMutableDictionary dictionary]; 
self.allLevels = [NSMutableDictionary dictionary];