NSMutableArray命令在使用addObject时被更改:来自NSDictionary使用foreach循环

时间:2013-09-20 06:12:36

标签: ios nsmutablearray nsdictionary

我有一个字典(self.dictMyDownloads),其值为:

    {
  1: {
    id: "1",
    name: "Venue Details",
    url: "http://www.sapusers.org/event_files/3338_VENUE DETAILS KB.pdf",
    file_size: "97011"
  },
  2: {
    id: "2",
    name: "another filename",
    url: "test url 2",
    file_size: "4321"
  },
  3: {
    id: "3",
    name: "Map/Directions",
    url: "http://www.sapusers.org/event_files/3337_SAP UK Location Map HB.pdf",
    file_size: "429320"
  }
}

我正在运行此代码,将主字典中的字典插入到nsmutablearray(self.mutArrMyDownloadsDetails)中:

for(NSDictionary *dict in [self.dictMyDownloads allKeys]){
    [self.mutArrMyDownloadsDetails addObject:[self.dictMyDownloads objectForKey:dict]];
}

但是当我显示结果时,添加到数组中的词典的顺序会发生变化。

这是结果日志显示:

    (
        {
        "file_size" = 97011;
        id = 1;
        name = "Venue Details";
        url = "http://www.sapusers.org/event_files/3338_VENUE DETAILS KB.pdf";
    },
        {
        "file_size" = 429320;
        id = 3;
        name = "Map/Directions";
        url = "http://www.sapusers.org/event_files/3337_SAP UK Location Map HB.pdf";
    },
        {
        "file_size" = 4321;
        id = 2;
        name = "another filename";
        url = "test url 2";
    }
)

我无法理解我在做错的地方或地点。请帮忙。

感谢。

2 个答案:

答案 0 :(得分:0)

对象不是按顺序存储在NSMutableDictnory中,因此您不能依赖它们在NSLog中显示的顺序。是否真的有必要在那里使用数组?如果可能的话,我建议只使用字典。

答案 1 :(得分:0)

另一种方法是从你的NSMutableArray创建一个NSArray,在你的for循环结束时对它进行排序:

NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"id" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];

NSArray *sortedArray = [NSArray arrayWithArray:[self.mutArrMyDownloadsDetails sortedArrayUsingDescriptors:sortDescriptors]];