使用两个键和值初始化NSDictionary



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

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

代码编译正确,但调试器在这一行停止,并显示以下消息"线程1:EXC_BAD_ACCESS"。

以前,因为我只需要一个参数,所以使用这条线,效果很好。

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

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

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

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

正如Wain所指出的,您的值有C字符串,而不是NSString对象。

此行:

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

是错误的,应该是:

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

您还应该检查参数的顺序(您看起来把键和值弄错了)。

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

不过,还有一点:创建字典可能使用了最冗长、最尴尬的语法。随着ObjectiveC2.0的出现,您可以使用更加紧凑的语法:

NSDictionary*参数=@{@"parameter1":@"value1",@"parameter2":@"value2"};

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

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

最新更新