user3600801
user3600801

Reputation:

Maintaining the order while iterating a NSDictionary

I have a NSDictionary which im iterating and Im saving the datas to core data as follows,

NSDictionary *details = [valueDict objectForKey:@"shipment_master"];

             for (NSDictionary *response in details) {
                 NSManagedObjectContext *context = [self managedObjectContext];

                 // remove all rows

                 [context performBlockAndWait:^{
                     // add new row(s)
                     NSManagedObject *master = [NSEntityDescription insertNewObjectForEntityForName:@"ShipmentMaster" inManagedObjectContext:context];
                     NSError *error;

                     [master setValue:[details objectForKey:response] forKey:@"values"];

                     // save MOC
                     if ([context hasChanges]) {
                         (void)[context save:&error];
                     }
                 }];
             }

The problem is that the order is being changed while looping the nsdictionary. For instance a comes after b then c ,d etc in the dictionary but when Im iterating it and saving it, the order is being changed, How can I maintain the order?

Upvotes: 0

Views: 394

Answers (3)

user5938635
user5938635

Reputation:

There is no order in NSMutableDictionary If you want to use it you may use it by storing keys into an NSArray then iterate it and fetch its relevant values you want to use. Hope it works for you :)

Upvotes: 0

balkaran singh
balkaran singh

Reputation: 2786

NSDictionary is an unordered collection. To say "the order I added them" has no meaning. If you want to access the keys in a certain order then you'll either have to store an array along side your dictionary or get the keys and then sort them and use that to access the values in that order.

Upvotes: 1

user5917312
user5917312

Reputation:

NSMutableDictionary is not ordered. There is nothing you can do to guarantee the order of keys because NSDictionary makes no attempt to preserve any particular ordering. To go over a dictionary in a particular order, you have to make an NSArray of the keys that is in the order you want, then iterate that and fetch the corresponding values.

Upvotes: 1

Related Questions