1

出于某种原因,我无法将数组添加到 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 对我来说并不新鲜。我只是有点疯狂地试图找到我的错误,因为这对我来说看起来很正常。

4

2 回答 2

4

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

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

而不是上面使用:

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

注意:每当您看到0x00000000

这意味着您的对象alloc未处理。

因此,在为它们设置任何数组/值之前,您需要分配 + 初始化它们。

于 2013-06-25T16:13:39.000 回答
2

0x00000000意味着nil。Objective C 对象的所有属性和实例变量都被初始化为 nil。因此,我们可以说您从未初始化过您的属性。

您可以在指定的初始化程序中初始化字典TCMExhibitFeedStore。(或者在您访问它们以添加元素之前)

self.storedLevels = [NSMutableDictionary dictionary];
self.allLevels = [NSMutableDictionary dictionary];
于 2013-06-25T16:13:30.470 回答