添加和获取NSMutableDictionary的值不起作用

时间:2015-01-31 10:10:44

标签: objective-c nsmutabledictionary

我正在尝试做一些复杂的事情,但是当我添加到一个nsmutabledictionary并尝试从中获取值时,它只是返回任何内容而不是在我尝试打印它返回时打印任何东西。即使动作被触发,我甚至无法在ibaction中打印任何内容。你能不能让我知道我做错了什么,它是什么?谢谢!

我正在做的超简化版本的示例代码:

NSMutableDictionary *test;
[test setObject:@"ValueIWantToGet" forKey:@"KeyIAmSetting"];
NSLog([test objectForKey:@"KeyIAmSetting"]); //Should print "ValueIWantToGet", right?

1 个答案:

答案 0 :(得分:3)

您的test变量未初始化。这样做:

NSMutableDictionary *test = [NSMutableDictionary dictionary];

NSMutableDictionary *test = [[NSMutableDictionary alloc] init];

在Objective-C中,所有对象都通过指针进行操作。因此,变量名前面的声明中有星号。如果不为指针指定任何内容,则其值仍未初始化,因此对它的任何引用都是未定义的行为。但是,在值恰好为nil的情况下,您不会看到崩溃,因为Objective-C允许向nil发送消息(它们没有效果)。

  

我正在制作NSMutableDictionary的属性,那么如果它属于某个属性,我应该如何初始化它?

属性应该在类的初始值设定项中初始化,例如

-(instancetype)init {
    if (self = [super init]) {
        _test = [NSMutableDictionary dictionary];
    }
    return self;
}