使用两个键值来初始化NSDictionary

时间:2013-12-12 21:08:40

标签: ios objective-c

我正在尝试创建一个需要传递给第三方库的参数列表。该对象需要是一个NSDictionary对象。我是Objective-C / iOS开发的新手。

NSDictionary* parameters = [NSDictionary dictionaryWithObjects:
                     [NSArray arrayWithObjects:@"parameter1",@"parameter2", nil]
            forKeys: [NSArray arrayWithObjects:"value1", "value2", nil]];

代码编译正确,但调试器在此行停止,并显示以下消息“Thread 1:EXC_BAD_ACCESS”。

之前,因为我只需要一个参数,所以使用这一行并且工作正常。

NSDictionary* parameters = [NSDictionary dictionaryWithObject:phoneNumber forKey:@"parameter1"]

我可以用于多个参数的其他替代方案吗?

3 个答案:

答案 0 :(得分:6)

你有向后的键和值。使用现代语法要容易得多:

NSDictionary *parameters = @{ @"parameter1" : @"value1", @"parameter2" : @"value2" };`.

正如Wain指出的那样,你有C字符串,而不是NSString个对象。

答案 1 :(得分:4)

这一行:

[NSArray arrayWithObjects:"value1", "value2", nil]

错了,应该是:

[NSArray arrayWithObjects:@"value1", @"value2", nil]

你还应该检查参数的顺序(你看起来已经得到了错误的键和值)。

答案 2 :(得分:0)

其他人已经解释了您编写的代码问题。

另一点是:你正在使用最冗长,最笨拙的语法来创建字典。随着Objective C 2.0的出现,您可以使用更紧凑的语法:

NSDictionary * parameters = @ {   @“parameter1”:@“value1”,   @“parameter2”:@“value2”};

此语法使用更直观的键:值排序。

搜索“Objective C literals”以了解更多信息。