根据部分计算numberOfRowsInSection

时间:2011-05-06 07:39:09

标签: iphone objective-c ipad uitableview

我正在创建一个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中,但葡萄酒不再与部分相对应。

非常感谢任何形式的帮助。

谢谢;)

2 个答案:

答案 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);