在迭代NSDictionary时维护顺序

时间:2016-04-27 07:20:05

标签: ios objective-c nsdictionary

我有一个我正在迭代的NSDictionary,我将数据保存到核心数据,如下所示,

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

问题是在循环nsdictionary时正在更改顺序。例如a在字典中出现b然后是c,d等,但是当我迭代并保存它时,订单正在改变,我该如何维护订单?

3 个答案:

答案 0 :(得分:2)

NSMutableDictionary未订购。您无法保证密钥的顺序,因为NSDictionary不会尝试保留任何特定的顺序。要按特定顺序查看字典,您必须按所需顺序制作NSArray个键,然后迭代并获取相应的值。

答案 1 :(得分:2)

NSDictionary是一个无序集合。说“我添加它们的顺序”没有任何意义。如果您想以特定顺序访问密钥,那么您必须在字典旁边存储数组或获取密钥,然后对它们进行排序并使用它来按顺序访问值。

答案 2 :(得分:1)

NSMutableDictionary中没有订单如果您想使用它,您可以通过将密钥存储到NSArray中然后迭代它并获取您想要使用的相关值来使用它。希望它适合你:)