今天被一个bug困扰了很久,最后发现根本原因是由于NSDictionary的无序性引起,为了加深印象,详细总结如下:
NSDictionary *testDict = [TestUtil getLocalDataFromJsonFile];
NSLog (@"testDict: %@", testDict);
for (NSString *key in testDict) {
NSLog (@"key: %@", key);
}
其中jsonFile中json如下:
{
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9",
"10": "10",
"11": "11",
"12": "12",
"13": "13",
"14": "14",
"15": "15",
"16": "16",
"17": "17",
"18": "18",
"19": "19",
"20": "20",
"21": "21",
"22": "22",
"23": "23"
}
打印结果如下:
2014-08-06 23:01:34.749 PPTVSports[408:90b] testDict: {
1 = 1;
10 = 10;
11 = 11;
12 = 12;
13 = 13;
14 = 14;
15 = 15;
16 = 16;
17 = 17;
18 = 18;
19 = 19;
2 = 2;
20 = 20;
21 = 21;
22 = 22;
23 = 23;
3 = 3;
4 = 4;
5 = 5;
6 = 6;
7 = 7;
8 = 8;
9 = 9;
}
2014-08-06 23:01:34.750 PPTVSports[408:90b] key: 18
2014-08-06 23:01:34.751 PPTVSports[408:90b] key: 10
2014-08-06 23:01:34.751 PPTVSports[408:90b] key: 19
2014-08-06 23:01:34.751 PPTVSports[408:90b] key: 11
2014-08-06 23:01:34.752 PPTVSports[408:90b] key: 12
2014-08-06 23:01:34.752 PPTVSports[408:90b] key: 1
2014-08-06 23:01:34.753 PPTVSports[408:90b] key: 20
2014-08-06 23:01:34.753 PPTVSports[408:90b] key: 2
2014-08-06 23:01:34.753 PPTVSports[408:90b] key: 13
2014-08-06 23:01:34.754 PPTVSports[408:90b] key: 3
2014-08-06 23:01:34.754 PPTVSports[408:90b] key: 21
2014-08-06 23:01:34.754 PPTVSports[408:90b] key: 14
2014-08-06 23:01:34.755 PPTVSports[408:90b] key: 4
2014-08-06 23:01:34.755 PPTVSports[408:90b] key: 5
2014-08-06 23:01:34.755 PPTVSports[408:90b] key: 15
2014-08-06 23:01:34.756 PPTVSports[408:90b] key: 22
2014-08-06 23:01:34.756 PPTVSports[408:90b] key: 6
2014-08-06 23:01:34.756 PPTVSports[408:90b] key: 23
2014-08-06 23:01:34.757 PPTVSports[408:90b] key: 7
2014-08-06 23:01:34.757 PPTVSports[408:90b] key: 16
2014-08-06 23:01:34.757 PPTVSports[408:90b] key: 8
2014-08-06 23:01:34.759 PPTVSports[408:90b] key: 17
2014-08-06 23:01:34.759 PPTVSports[408:90b] key: 9
通过上面的代码,你看到了什么?
NSDictionary的debugDescription方法得到的输出打印的顺序和原始的Json没有半毛钱关系,和枚举NSDictionary的allkeys的顺序也没有半毛钱关系。
NSDictionary具有无序性,所以切记千万不能依赖NSDictionary的输出误以为枚举NSDictionary的allkeys也会得到同样的顺序。
尼玛,理论不扎实,debug小半天啊,有木有~