NSMutableDictionary中没有保存键/值对

时间:2010-02-19 23:14:22

标签: objective-c cocoa macos nsmutabledictionary

当我的应用程序启动时,它循环通过将随机数的值与网格上的坐标键添加到字典中。这是一些代码:

[grid setObject:v forKey:k];

K是“xy”形式的字符串,其中x和y是单个数字整数,V是NSNumber。这两个都在添加之前记录到控制台,所以我知道这些不是问题。但是,尽管此代码运行了49次(对于7 x 7网格),但字典最后是空的。

网格在我的头文件中定义为:

NSMutableDictionary *grid;

然后我在应用程序加载时初始化它(但我不知道是否必须这样做)使用代码:

grid = [[[NSMutableDictionary alloc] init] retain];

这让我很困惑,因为我刚刚开始学习Objective-C,而且我来自更宽容的C#和Python。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

在Objective-C中,向nil(C#世界中的null引用)发送消息既合法又常见。结果是nil,因此通常会默默地传递。一旦你绕过它,这是一个非常有用的工具,使代码更清洁(没有检查null等)。因此,在您向字典添加条目的行中放置一个断点。为此,请单击Xco​​de中该行旁边的装订线。打开Breakpoints运行应用程序。当调试器停在该行时,您可以将鼠标悬停在grid上。我怀疑你会发现它是nil0x0)。您还可以打开运行控制台并键入po grid以打印gdb对grid的描述。再说一遍,我想你会发现它是零。

如果没有看到更多代码,就无法帮助您找出gridnil的原因。

在旁注中,您不需要-retain之后的额外alloc/init。阅读内存Management Programming Guide for Cocoa。这将是你的朋友。