Как перебрать NSArray, содержащий NSDictionaries? - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть NSArray из NSDictionaries, каждое из которых имеет 4 значения ключа.

Я создаю объекты для каждого NSDictionary и назначаю ключи соответственно.

Как я могуитерация по массиву словарей и установка каждого ключа в качестве атрибута для объекта?

Я создал массив, показанный на рисунке ниже, с помощью этого кода:

if (muscleArray == nil)
    {
        NSString *path = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"plist"];
        NSMutableArray *rootLevel = [[NSMutableArray alloc]initWithContentsOfFile:path];
        self.muscleArray = rootLevel;
    }

    NSMutableArray *arrayForSearching = [NSMutableArray array];
    for (NSDictionary *muscleDict in self.muscleArray)
        for (NSDictionary *excerciseDict in [muscleDict objectForKey:@"exercises"])
            [arrayForSearching addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                                          [excerciseDict objectForKey:@"exerciseName"], @"exerciseName",
                                          [muscleDict objectForKey:@"muscleName"], @"muscleName",
                                          [muscleDict objectForKey:@"musclePicture"], @"musclePicture", nil]];
    self.exerciseArray = arrayForSearching;

    NSString *path = [[NSBundle mainBundle] pathForResource:@"ExerciseDescriptions"
                                                     ofType:@"plist"];
    NSDictionary *descriptions = [NSDictionary dictionaryWithContentsOfFile:path];

    NSMutableArray *exercises = self.exerciseArray;
    for (NSInteger i = 0; i < [exercises count]; i++) {
        NSDictionary *dict = [[exercises objectAtIndex:i] mutableCopy];

        NSString *exerciseName = [dict valueForKey:@"exerciseName"];
        NSString *description = [descriptions valueForKey:exerciseName];
        [dict setValue:description forKey:@"exerciseDescription"];
        [exercises replaceObjectAtIndex:i withObject:dict];
    }

Код для его созданияобъект будет выглядеть так:

PFObject *preloadedExercises = [[PFObject alloc] initWithClassName:@"preloadedExercises"];
[preloadedExercises setObject:exerciseName forKey:@"exerciseName"];
[preloadedExercises saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if (!error) {
        NSLog(@"Success");
    } else {
        NSLog(@"Error: %@ %@", error, [error userInfo]);
    }
}];

Массив словарей выглядит так: enter image description here

Ответы [ 3 ]

3 голосов
/ 09 декабря 2011
// Assuming you want to do something with all of these objects you're creating
// We'll start by creating an NSMutableArray
NSMutableArray *newObjects = [NSMutableArray arrayWithCapacity:arrayOfDictionaries.count];

for (NSDictionary *dictionary in arrayOfDictionaries)
{
    PFObject *object = [PFObject objectWithClassName:@"preloadedExercises"];
    object.exerciseDescription = [dictionary objectForKey:@"exerciseDescription"];
    object.exerciseName = [dictionary objectForKey:@"exerciseName"];
    object.muscleName = [dictionary objectForKey:@"muscleName"];
    object.musclePicture = [dictionary objectForKey:@"musclePicture"];

    // Add object to mutable array
    [newObjects addObject:object];
}
2 голосов
/ 09 декабря 2011

После быстрого взгляда на Parse SDK, который вы упомянули в комментариях, я думаю, что вы ищете это:

NSMutableArray *exercisesArray = [[NSMutableArray alloc] init];
PFObject *preloadedExercises;
id value;

// Iterate through your array of dictionaries    
for (NSDictionary *muscleDict in self.muscleArray) {
    // Create our object
    preloadedExercises = [PFObject objectWithClassName:@"preloadedExercises"];

    // For each dictionary, iterate through its keys
    for (id key in muscleDict) {
        // Grab the value
        value = [muscleDict objectForKey:key];

        // And assign each attribute of the object to the corresponding values
        [preloadedExercises setObject:value forKey:key];  
    }

    // Finally, add this newly created object to your array
    [exercisesArray addObject: preloadedExercises];
}
0 голосов
/ 09 декабря 2011
for(NSDictionary* dictionary in yourArray){
// here you can iterate through. and assign every dictionary as you wish to.
}
...