iOS:NSMutableDictionary属性不会设置

时间:2013-06-25 16:11:24

标签: ios objective-c nsmutabledictionary

由于某种原因,我无法将数组添加到nsmutabledictionary中。我把它在我的.h文件中声明为属性:

@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对我来说并不新鲜。我只是有点疯狂试图找到我的错误,因为这对我来说都很正常。

2 个答案:

答案 0 :(得分:4)

以下几行让我感到困惑......

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

而不是上面的使用:

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

注意:每当看到 0x00000000

这意味着您的对象不是alloc - 已。

因此,在为它们设置任何数组/值之前,需要先分配+ init。

答案 1 :(得分:2)

0x00000000表示nil。 Objective C对象的所有属性和实例变量都初始化为nil。因此,我们可以告诉您,您从未初始化过您的属性。

您可以在TCMExhibitFeedStore的指定初始值设定项中初始化词典。 (或在您访问它们之前添加元素)

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