这是将对象添加到NSMutableDictionary的代码:
-(void)mapUserFields: (UIControl *) sender {
nsd = [[NSMutableDictionary alloc]init];
int tagValue = sender.tag;
UITextField *field = [sender viewWithTag: tagValue];
[nsd setObject:field.text forKey:[NSString stringWithFormat:@"%d", tagValue]];
NSLog(@"\nfield.text: %@ tagValue: %d nsd.count: %d\n",field.text, tagValue, nsd.count);
}
这是调试器控制台的输出:
2014-09-17 15:18:10.022 Books[20738:60b]
field.text: 2 tagValue: 0 nsd.count: 1
2014-09-17 15:18:11.394 Books[20738:60b]
field.text: 4 tagValue: 1 nsd.count: 1
2014-09-17 15:18:16.918 Books[20738:60b]
field.text: 6 tagValue: 2 nsd.count: 1
2014-09-17 15:18:18.863 Books[20738:60b] dictionary.count: 1
如您所见,计数保持为1,但数据有效。有什么问题,我该如何解决?
答案 0 :(得分:0)
如上面Josh所示,这一行是你的问题:
nsd = [[NSMutableDictionary alloc]init];
因为它用新的字典替换整个字典。因此,添加一个密钥并不是要删除另一个密钥,而是您明确地抛弃了之前的数据。
也许试试:
if (nds == nil) {
nsd = [[NSMutableDictionary alloc]init];
}
答案 1 :(得分:0)
您已声明NSMutableDictionary' nsd'在全局范围内,每当某个控件事件被触发时,您都会分配内存并初始化字典。每次都可以初始化它,而不是在视图控制器的viewDidLoad方法中初始化它。
- (void)viewDidLoad
{
[super viewDidLoad];
nsd = [[NSMutableDictionary alloc]init];
}
然后在你的方法中将对象添加到字典
- (void)mapUserFields:(UIControl *) sender
{
int tagValue = sender.tag;
UITextField *field = [sender viewWithTag: tagValue];
[nsd setObject:field.text forKey:[NSString stringWithFormat:@"%d", tagValue]];
NSLog(@"\nfield.text: %@ tagValue: %d nsd.count: %d\n",field.text, tagValue, nsd.count);
}