Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 向NSMutableArray添加项-逻辑问题_Ios_Objective C - Fatal编程技术网

Ios 向NSMutableArray添加项-逻辑问题

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"];

我有5个动物对象,我试图将其保存在一个NSMutableDIctionary中。但是,根据我下面的代码,只有最后一个动物保存在NSMutableDIctionary中

我认为我没有正确地循环它

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];
    }