我正在尝试创建一个需要传递给第三方库的参数列表。该对象需要是一个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"]
我可以用于多个参数的其他替代方案吗?
答案 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”以了解更多信息。