我是Obj-C的新手,我在这里遇到了一些问题。
我正在尝试将临时字典中的值插入数组
NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];
NSMutableArray *myArray = [[NSMutableArray alloc] init];
[myDict setObject:[NSNumber numberWithInt:100] forKey:@"Record"];
[myDict setObject:@"www" forKey:@"Name"];
[myArray addObject:myDict];
[myDict setObject:[NSNumber numberWithInt:80] forKey:@"Record"];
[myDict setObject:@"eee" forKey:@"Name"];
[myArray addObject:myDict];
[myDict setObject:[NSNumber numberWithInt:70] forKey:@"Record"];
[myDict setObject:@"rrr" forKey:@"Name"];
[myArray addObject:myDict];
[myDict setObject:[NSNumber numberWithInt:0] forKey:@"Record"];
[myDict setObject:@"ttt" forKey:@"Name"];
[myArray addObject:myDict];
NSLog(@"myArray %@",myArray);
无论这里的实施代码不好(以及我的英语不好:p),我想弄清楚的是如何在myDict
每次插入后清除myArray
。< / p>
在每个[myDict removeAllObjects];
之后使用addObject
在最后给我一个空数组。
谢谢!
感谢您的所有答案,[myArray addObject:[[myDict copy] autorelease]];
代码运行正常。
答案 0 :(得分:4)
这里的问题是你一遍又一遍地将完全相同的可变字典添加到数组中。因此,您的数组只是对完全相同对象的引用的集合。因此,数组中的每个对象与最后一个对象相同都应该不足为奇。
为了做你想做的事,你有两个选择。第一种是每次都复制你的可变字典并将该副本添加到数组中。您可以使用
执行此操作[myArray addObject:[[myDict copy] autorelease]];
另一个解决方案是使用单独的词典开头。您不必每次都改变一个可变字典,而是构建一个全新的NSDictionary:
[myArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:100], @"Record",
@"www", @"Name",
nil]];
[myArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:80], @"Record",
@"eee", @"Name",
nil]];
答案 1 :(得分:2)
我认为在将字典添加到数组之前需要复制字典...
[myArray addObject:[[myDict copy] autorelease]];
然后您可以照常使用[myDict removeAllObjects]
。
答案 2 :(得分:0)
NSMutableDictionary *
因为*
建议是指向字典对象的指针。
因此,当您将其添加到数组时,它仍然是同一个对象 - 由myDict
指向以及数组中的元素。
因此,我建议您在每次添加后创建新词典:
NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];
NSMutableArray *myArray = [[NSMutableArray alloc] init];
[myDict setObject:[NSNumber numberWithInt:100] forKey:@"Record"];
[myDict setObject:@"www" forKey:@"Name"];
[myArray addObject:myDict];
myDict = [[NSMutableDictionary alloc] init];
[myDict setObject:[NSNumber numberWithInt:80] forKey:@"Record"];
[myDict setObject:@"eee" forKey:@"Name"];
[myArray addObject:myDict];
我假设您在上面的代码中使用ARC。
尽管如此,Objective-C'方式将会更多:
[myArray addObject: [NSDictionary dictionaryForObjectsAndKeys: [NSNumber numberWithInt:80], @"Record", @"www", @"Name"]];