我正在尝试做一些复杂的事情,但是当我添加到一个nsmutabledictionary并尝试从中获取值时,它只是返回任何内容而不是在我尝试打印它返回时打印任何东西。即使动作被触发,我甚至无法在ibaction中打印任何内容。你能不能让我知道我做错了什么,它是什么?谢谢!
我正在做的超简化版本的示例代码:
NSMutableDictionary *test;
[test setObject:@"ValueIWantToGet" forKey:@"KeyIAmSetting"];
NSLog([test objectForKey:@"KeyIAmSetting"]); //Should print "ValueIWantToGet", right?
答案 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;
}