我遇到NSDictionary
null
NSString
- (void)sourceDidChange:(NSNotification *)aNote {
NSDictionary *aDict = [aNote userInfo];
DLog(@"%@", aDict);
NSString *newSourceString = [aDict objectForKey:@"newSource"];
DLog(@"%@", newSourceString);
newSourceString = [newSourceString stringByReplacingOccurrencesOfString:@" " withString:@""];
DLog(@"%@", newSourceString);
NSString *inspectorString = [newSourceString stringByAppendingString:@"InspectorController"];
DLog(@"%@", inspectorString);
newSourceString = [newSourceString stringByAppendingString:@"ViewController"];
DLog(@"%@", newSourceString);
}
的问题,即使字符串在字典中也是如此。这是代码:
2010-04-17 23:50:13.913 CoreDataUISandbox[13417:a0f] -[RightViewController sourceDidChange:] { newSource = "Second View"; }
2010-04-17 23:50:13.914 CoreDataUISandbox[13417:a0f] -[RightViewController sourceDidChange:] (null)
2010-04-17 23:50:13.916 CoreDataUISandbox[13417:a0f] -[RightViewController sourceDidChange:] (null)
2010-04-17 23:50:13.917 CoreDataUISandbox[13417:a0f] -[RightViewController sourceDidChange:] (null)
2010-04-17 23:50:13.917 CoreDataUISandbox[13417:a0f] -[RightViewController sourceDidChange:] (null)
我得到以下日志声明:
newSource
如您所见,字符串位于键objectForKey:
下的字典中,但当我调用null
时,我得到{{1}}。我甚至尝试过清理项目的后备选项。
有没有人碰到这个,或者我只是忘记了一些非常基本的东西?
答案 0 :(得分:3)
此时,由于某种原因,您仍然会收到来自DLog的报告错误。
尝试:
newSourceString
的值。 答案 1 :(得分:2)
什么会导致
objectForKey:
返回带有有效字符串的null?
两件事之一:
aDict
为nil
,因此您向objectForKey:
发送了nil
条消息。发送给nil
的邮件只会返回nil
。正如您所看到的,字符串位于关键字newSource ...
下的字典中
实际上,我不确定那里发生了什么。 NSDictionary的描述(如果它包含该键的字符串)将是 { newSource = "some string here"; }
,它与您记录的描述不匹配。另一方面,如果它是一个不是字典的对象,则在尝试发送objectForKey:
消息时,应该得到“不响应选择器”异常。因此,虽然它确实从您的日志输出中显示为某些,但我不知道它是什么,除了它可能不是字典。
答案 2 :(得分:2)
我遇到了类似的问题。对我来说问题是我认为我的密钥是一个NSString,当它实际上是一个NSNumber。您可以使用以下
检查您的密钥for (id key in [aDict allKeys]){
NSLog(@"%@:%@",key, [[key class] description]);
}
}
答案 3 :(得分:1)
你没有忽略你编码的环境。如果它是GNUstep,特别是gnustep1.19,请继续阅读。否则忽略。
我刚遇到gnustep1.19(.3)的一个非常奇怪的错误,但它完全模仿了这个问题。
NSString * key = <some string>
NSDictionary * dict = <some dictionary>
(gdb) p [dict objectForKey:key]
$20 = (struct objc_object *) 0x0
(gdb) p [dict objectForKey:@"MyKeyValue"]
$22 = (struct objc_object *) 0x7fffd94fe690
(gdb) p [key compare"@MyKeyValue"]
$25 = NSOrderedSame
在这种情况下,通过从另一个NSDictionary中提取'key'来初始化'key',而另一个字典中的一些条目(从文件加载)包含Unicode字符。也就是说,到目前为止,我发现的唯一关联 - 从源文件中删除unicode并重新运行应用程序使其工作。
这不是gnustep1.18或&gt; = gnustep1.20
的问题答案 4 :(得分:0)
我怀疑你的字符串实际上是字面上的“(null)” - 也就是说,它长6个字母,然后拼出(-n-u-l-l-)。
答案 5 :(得分:0)
我怀疑aDict不是NSDictionary的一个实例。 记录它的课程以确认。