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