将字段中的值添加到NSDictionary时,我的应用程序崩溃了

时间:2011-09-20 10:11:58

标签: objective-c ios nsdictionary

我正在开发一个应用程序,其中用户添加药物名称和他应该服用的次数..(添加视图显示为模态视图)。

当我在NSlog中填写用户填充的值时,当我尝试将它们插入字典时应用程序崩溃似乎没问题

NSString *name = [NSString stringWithString:[MedName_Field text]];
int times = [[times_Field text] intValue];

NSLog(@"%@ - %i",name,times); // <- Here it is OK.

 //create a dictionary 
NSDictionary *dic = [[NSDictionary alloc] init];
[dic setValue:name forKey:@"Name"]; // <- Crash!

感谢。

2 个答案:

答案 0 :(得分:3)

NSDictionary个实例不可变,因此您无法在创建后添加/删除任何内容。您需要使用可变变量 - NSMutableDictionary:

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setValue:name forKey:@"Name"]; // <- No Crash! ;)

答案 1 :(得分:2)

NSDictionary不可变,因此您无法创建它,然后向其添加键和值。

创建一个可变字典:

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setValue:name forKey:@"Name"];

或者使用init {/ 1>}在initWithObjects:forKeys:上添加密钥

NSDictionary *dic = [[NSDictionary alloc]
                     initWithObjects:[NSArray arrayWithObjects:name,nil]
                     forKeys:[NSArray arrayWithObjects:@"Name",nil]];

但是你不能在此之后添加密钥,因为字典是不可变的。