Подсчитайте числоOfRowsInSection в соответствии с разделом - PullRequest
0 голосов
/ 06 мая 2011

Я создаю приложение для 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"}]}

Обычно у меня должно быть 2 ряда для раздела "Мулис" и один ряд для остальных. Я пробовал несколько решений, среди которых:

    - (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) return

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;

    );

}

Этот код работает отлично, но теперь я бы хотел расположить мою карту вин по алфавиту. Мой словарь хорош в алфавитном порядке. В документации я видел, что все ключи сортируют результат случайным образом, поэтому я использую:

[[[appDelegate.mutableDic allKeys]sortedArrayUsingSelector:@selector(compare:)] objectAtIndex:section];

в viewForHeaderInSection и

NSDictionary *ligneVin;
ligneVin=[[[appDelegate.mutableDic allValues ] objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

в cellForRowAtIndexPath, но вина больше не соответствуют разделам.

Любая помощь очень ценится.

Спасибо;)

Ответы [ 2 ]

1 голос
/ 06 мая 2011

что именно вы пытаетесь?Я думаю, что это должно быть

return [[self.rows objectAtIndex:section]count];

, тогда вы получите количество объектов "сообщений".Вы пытаетесь получить объект с именем «Moulis» (например), но у вас нет объекта с этим ключом.Ваш объект содержит и атрибут с именем «наименование», который имеет значение «Мулис».Ваш объект также содержит ключи nom, annee и prix.Все вместе - это один объект.

// РЕДАКТИРОВАТЬ: на самом деле это даже не сработает, потому что self.rows уже является объектом "posts".поэтому вы должны вернуть self.rows.count

, после чего вы можете получить доступ к каждому объекту в cellForRowAtIndexPath::создайте для вас рабочий код;) На вашем месте я бы сначала реорганизовал ваши данные:

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];
0 голосов
/ 06 мая 2011

Кажется, вам не хватает некоторого кода здесь. dict нигде не определено. Или это определено за рамками того, что вы опубликовали. Я бы посоветовал печатать просто диктовку. Я думаю, вы обнаружите, что он не соответствует ожиданиям.

NSLog(@"dict %@", dict);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...