【问题标题】:NSMutableDictionary doesn't initialize correctlyNSMutableDictionary 未正确初始化
【发布时间】:2012-06-17 12:35:43
【问题描述】:

我今天遇到了一个意外错误。我有一个NSArray 和一个NSMutableDictionary。问题是我的NSMutableDictionary 变成了一个数组。代码如下:

标题:

NSArray *tableViewCellValues;
NSMutableDictionary *inputValues;

实现:

- (void)viewDidLoad
{
  [super viewDidLoad];
  tableViewCellValues = [NSArray arrayWithObjects:@"First", @"Second", @"Third", nil];
  inputValues = [NSMutableDictionary dictionary];
  //other code...
}

所以通常我应该得到一个以“First”、“Second”和“Third”作为对象的数组和一个空的NSMutableDictionary。当我在初始化NSMutableDictionary 后立即在日志中打印它时,我得到以下信息:

(lldb) po tableViewCellValues
(NSArray *) $1 = 0x00000000 <nil>
(lldb) po inputValues
(NSMutableDictionary *) $2 = 0x06a80420 <__NSArrayI 0x6a80420>(
First,
Second,
Third
)

(lldb) po [tableViewCellValues class]
error: Couldn't execute function; result was eExecutionDiscarded
(lldb) po [inputValues class]
(id) $4 = 0x01453b64 __NSArrayI

我有点困惑。我尝试清理并再次运行它,但没有任何反应。

如果重要的话,我正在使用 Mac OS X 10.7.3 和 Xcode 4.3。

任何帮助将不胜感激。

【问题讨论】:

  • 你试过用alloc和init来初始化你的字典吗? [[NSMutableDictionary alloc] init]
  • @skram 我做了,但没有任何区别
  • 您在使用 ARC 吗?如果没有,则必须同时保留数组和字典

标签: iphone objective-c ios nsarray nsmutabledictionary


【解决方案1】:

你真的想为你的字典分配内存,所以它应该是:

self.inputValues = [[NSMutableDictionary alloc] init];

【讨论】:

  • 好吧,你可以这样做。如果它不是属性,则只需更改为self-&gt;inputValues = ...
【解决方案2】:

新的文字语法更好:

self.myMutDict = [@{} mutableCopy]

或者只是为了理解而没有属性的较长版本:

NSDictionary *emptyDict = @{};
NSMutableDictionary *myMutDict = [emptyDict mutableCopy];

【讨论】:

  • 截至 2015 年,这个答案是最好的
【解决方案3】:

这是因为你没有分配你的字典

使用此代码

inputValues = [[NSMutableDictionary alloc] init];

【讨论】:

  • 对不起,这不是我想要的,inputValues 应该是空的
猜你喜欢
  • 1970-01-01
  • 2020-04-21
  • 2022-01-22
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多