Ios 向NSMutableArray添加项-逻辑问题
我有5个动物对象,我试图将其保存在一个NSMutableDIctionary中。但是,根据我下面的代码,只有最后一个动物保存在NSMutableDIctionary中 我认为我没有正确地循环它Ios 向NSMutableArray添加项-逻辑问题,ios,objective-c,Ios,Objective C,我有5个动物对象,我试图将其保存在一个NSMutableDIctionary中。但是,根据我下面的代码,只有最后一个动物保存在NSMutableDIctionary中 我认为我没有正确地循环它 for(int i = 0; i < animalCount; i++) { [allContacts setObject:name forKey:@"name"]; [allContacts setObject:age forKey:@"age"];
for(int i = 0; i < animalCount; i++) {
[allContacts setObject:name forKey:@"name"];
[allContacts setObject:age forKey:@"age"];
[allContacts setObject:gender forKey:@"gender"];
}
我希望所有五个动物对象都保存在NSMutableDIctionary中,以便在UITableView中显示它们
NSMutableDictionary的键是唯一的
您要做的是构建一个数组,该数组的每个对象都是一个字典
我认为你错了。您应该将字典保存到数组中,以填充tableview
NSMutableArray *animals = [NSMutableArray array];
for(int i = 0; i < animalCount; i++) {
NSDictionary *dict = @{@"name" : name, @"age" : age, @"gender" : gender};
[animals addObject:dict];
}
首先创建一个NSMutableArray,以便循环并创建字典。然后创建单独的词典
NSMutableArray *outputArray = [NSMutableArray array];
for ( int i=0; i< animalCount; i++) {
NSMutableDictionary *internalDictionary = [NSMutableDictionary dictionary];
[internalDictionary setObject:[nameArray objectAtIndex: i] forKey:@"name"];
[internalDictionary setObject:[ageArray objectAtIndex: i] forKey:@"age"];
[internalDictionary setObject:[genderArray objectAtIndex: i] forKey:@"gender"];
[outputArray addObject:internalDictionary];
}
NSLog(@"%@",outputArray);
干杯 你需要一个字典数组,其中键是常量name、age、gender,你的值应该从它们的索引中考虑。你需要一个name、age和gender数组,除非你有很多类似的字典:
NSMutableArray * contentsArray = [NSMutableArray new];
for(int i = 0; i < animalCount; i++) {
NSMutableDictionary * allContacts = [[NSMutableDictionary alloc] init];
[allContacts setObject:arrNames[i] forKey:@"name"];
[allContacts setObject:arrAges[i] forKey:@"age"];
[allContacts setObject:arrGenders[i] forKey:@"gender"];
[contentsArray addObject:allContacts];
}
或者在现代目标c中,更简单和更短:
NSMutableArray *contentsArray = [NSMutableArray new];
for(int i = 0; i < animalCount; i++) {
[contentsArray addObject:@{@"name" : arrNames[i],
@"age" : arrAges[i],
@"gender" : arrGenders[i]}];
}
原因是每次循环时,都会更新MSMutableDictionary的键,但不会将其保存在任何位置 只需使用NSMutableArray,并在每次更新时保存字典即可 因此,首先在循环外部初始化数组-
NSMutableArray *allContactsArray = [[NSMutableArray alloc] initWithCapacity: animalCount];
现在,运行循环,并在每次松开字典之前保存它
for(int i = 0; i < animalCount; i++) {
[allContacts setValue:name forKey:@"name"];
[allContacts setValue:age forKey:@"age"];
[allContacts setValue:gender forKey:@"gender"];
//save the allContacts dictionary in the array
[allContactsArray insertObject:allContacts atIndex:i];
}
通过这种方式,您还可以在添加词典时保存词典的索引
NSMutableArray * contentsArray = [NSMutableArray new];
for(int i = 0; i < animalCount; i++) {
NSMutableDictionary * allContacts = [[NSMutableDictionary alloc] init];
[allContacts setObject:arrNames[i] forKey:@"name"];
[allContacts setObject:arrAges[i] forKey:@"age"];
[allContacts setObject:arrGenders[i] forKey:@"gender"];
[contentsArray addObject:allContacts];
}
NSMutableArray *contentsArray = [NSMutableArray new];
for(int i = 0; i < animalCount; i++) {
[contentsArray addObject:@{@"name" : arrNames[i],
@"age" : arrAges[i],
@"gender" : arrGenders[i]}];
}
NSMutableArray *allContactsArray = [[NSMutableArray alloc] initWithCapacity: animalCount];
for(int i = 0; i < animalCount; i++) {
[allContacts setValue:name forKey:@"name"];
[allContacts setValue:age forKey:@"age"];
[allContacts setValue:gender forKey:@"gender"];
//save the allContacts dictionary in the array
[allContactsArray insertObject:allContacts atIndex:i];
}