0

我是 ios 编程新手。

我正在尝试使用现代objective-c语法访问字典中的变量,如下面的代码。

但是,这些都不起作用。

运行ios模拟器时第一行和第二行失败。

当我按下屏幕上的按钮时,第三个会导致错误。

//NSDictionary *myData = @{@"name":@(nameField.text), @"birthdate":@(birthField.text), @"sex":@(selectedSex)};

//NSDictionary *myData = @{@"name":@nameField.text, @"birthdate":@birthField.text, @"sex":@selectedSex};

NSDictionary *myData = @{@"name":nameField.text, @"birthdate":birthField.text, @"sex":selectedSex};

当我尝试上面的第三行时出现此错误消息。

2013-10-02 09:12:56.160 LifeTimer[18603:11303] *** Terminating app due to uncaught
exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary
initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'

我该如何解决这个问题?

我想我误解了一些非常基本的东西。

4

2 回答 2

0

[[myDict objectForKey:@"id"] intValue]假设id是一个int如果值是一个字符串,你甚至不需要最后一个方法:[myDict objectForKey:@"name"]

于 2013-10-02T00:51:54.470 回答
0

不幸的是,您不能通过使用文字语法来定义带有 nil 的字典。通过 initWithObjectsAndKeys:、initWithObjects:forKeys:count: 等方法定义 NSDictionary 的旧方法也是如此。除非您不将 Nils 包装到确认 NSCopying 协议的 NSNull 中,否则不允许使用 Nils,该协议对于 NSDictionary 的键和值都是强制性的。

于 2013-10-02T00:28:39.777 回答