Maintaining the order while iterating a NSDictiona

2020-05-04 14:59发布

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?

3条回答
太酷不给撩
2楼-- · 2020-05-04 15:13

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.

查看更多
霸刀☆藐视天下
3楼-- · 2020-05-04 15:32

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 :)

查看更多
甜甜的少女心
4楼-- · 2020-05-04 15:34

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.

查看更多
登录 后发表回答