我正在创建一个Ipad应用程序,它将作为酒单。
我的酒单按部分组织,每个部分都有不同的行数。
我的问题是我无法按照部分计算行数。
我解析了这个Json文件:
{"posts":[{"appellation":"Bordeaux Sup\u00e9rieur","nom":"Chateau David Beaulieu","annee":"2008","prix":"25"},{"appellation":"Blaye","nom":"Chateau L'Embrun","annee":"2006","prix":"35"},{"appellation":"Moulis","nom":"Ch\u00e2teau Poujeaux","annee":"1990","prix":"75"},{"appellation":"Moulis","nom":"Ch\u00e2teau Chasse-Spleen","annee":"1990","prix":"80"}]}
通常情况下,“Moulis”部分应该有2行,其他部分应该有1行。 我尝试了几种解决方案:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSString *appellation=[[self.rows objectAtIndex:section] objectForKey:@"appellation"];
NSLog(@"appellation: %@",appellation);
NSArray *cpt=[dict objectForKey:appellation];
NSLog(@"cpt: %@",cpt);
return [cpt count];
}
它返回
2011-05-03 13:49:12.947 cha[9913:207] appellation: Moulis
2011-05-03 13:49:12.947 cha[9913:207] cpt: (null)
2011-05-03 13:49:12.948 cha[9913:207] appellation: Bordeaux Supérieur
2011-05-03 13:49:12.949 cha[9913:207] cpt: (null)
2011-05-03 13:49:12.951 cha[9913:207] appellation: Blaye
2011-05-03 13:49:12.952 cha[9913:207] cpt: (null)
它返回好的部分但不是好的部分。
NSLog(@“dict%@”,dict)返回
2011-05-06 10:13:56.835 chan[2751:207] dict {
posts = (
{
annee = 2008;
appellation = "Bordeaux Sup\U00e9rieur";
nom = "Chateau David Beaulieu";
prix = 25;
},
{
annee = 2006;
appellation = Blaye;
nom = "Chateau L'Embrun";
prix = 35;
},
{
annee = 1990;
appellation = Moulis;
nom = "Chateau Poujeaux";
prix = 75;
},
{
annee = 1990;
appellation = Moulis;
nom = "Chateau Chasse Spleen";
prix = 80;
);
}
此代码完美无缺,但现在我想按字母顺序排列我的酒单。我的词典是按字母顺序排列好的。我在文档中看到allKeys随机排序结果,所以我使用:
[[[appDelegate.mutableDic allKeys]sortedArrayUsingSelector:@selector(compare:)] objectAtIndex:section];
在viewForHeaderInSection和
中NSDictionary *ligneVin;
ligneVin=[[[appDelegate.mutableDic allValues ] objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
在cellForRowAtIndexPath中,但葡萄酒不再与部分相对应。
非常感谢任何形式的帮助。
谢谢;)
答案 0 :(得分:1)
return [[self.rows objectAtIndex:section]count];
然后你得到对象“帖子”的计数。您尝试的是获取名为“Moulis”的对象(例如),但您没有该对象的对象。您的对象包含名为“appellation”的属性,其值为“Moulis”。您的对象还包含键nom,annee和prix。所有这些都是一个对象。
//编辑:实际上这甚至不起作用,因为self.rows
已经是“帖子”对象。所以你必须返回self.rows.count
然后您可以通过以下方式访问cellForRowAtIndexPath:
中的每个对象:
NSDictionary *dic = [self.rows objectAtIndex:indexPath.row];
[dic objectForKey:@"appellation"];
[dic objectForKey:@"nom"];
[dic objectForKey:@"annee"];
[dic objectForKey:@"prix"];
// EDIT2:
确定您添加的信息现在足以为您创建一个有效的代码;)
在你的位置,我会首先重新组织你的数据:
NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];
for (NSDictionary *dic in [wineList objectForKey:@"posts"]) {
NSString *key = [dic valueForKey:@"appellation"];
if ([mutableDic valueForKey:key] == nil) {
[mutableDic setObject:[NSMutableArray array] forKey:key];
}
[(NSMutableArray*)[mutableDic objectForKey:key] addObject:dic];
}
您只需要执行此操作一次,例如下载数据后。然后将此字典保存为类变量。
然后您可以按如下方式访问此词典:
return [[[mutableDic allValues] objectAtIndex:section] count];
和
cell = [[[mutableDic allValues] objectAtIndex:section] objectAtIndex:row];
答案 1 :(得分:0)
您似乎在这里遗漏了一些代码。 dict没有在任何地方定义。或者它的定义超出了您发布的范围。我建议打印dict。我想你会发现它没有你所期望的。
NSLog(@"dict %@", dict);