iphone Odd Проблема при использовании пользовательской ячейки - PullRequest
1 голос
/ 02 мая 2010

Обратите внимание, где у меня есть NSLOG. Все, что отображается в журнале, это первые три элемента в nameSection. После некоторого тестирования я обнаружил, что он показывает, сколько ключей существует, потому что, если я добавлю ключ в список, он будет записывать четвертый элемент в журнал.

nameSection должен быть массивом строк, которые составляют массив ключей в файле plist.

файл plist имеет 3 словаря, каждый из которых содержит несколько массивов строк. Код выбирает словарь, с которым я работаю правильно, затем должен использовать имена массивов в качестве разделов в таблице, а строки в каждом массиве - как отображаемые в каждой ячейке.

, так что если в словаре, с которым я работаю, есть 3 массива, NSLOG отобразит 3 строки из первого массива:

2010-05-01 17: 03: 26.957 Контрольные списки [63926: 207] string0 2010-05-01 17: 03: 26.960 Контрольные списки [63926: 207] string1 2010-05-01 17: 03: 26.962 Контрольные списки [63926: 207] string2

затем остановитесь с: 2010-05-01 17: 03: 26.963 Контрольные списки [63926: 207] * Завершение работы приложения из-за необработанного исключения «NSRangeException», причина: «* - [NSCFArray objectAtIndex:] : index (3) за пределами (3) '

если я добавил массив в словарь, он заносит в журнал 4 элемента вместо 3.

Надеюсь, это объяснение имеет смысл ...

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return [keys count];
}

-(NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger) section {
    NSString *key = [keys objectAtIndex:section];
    NSArray *nameSection = [names objectForKey:key];
    return [nameSection count];

}

-(UITableViewCell *)tableView:(UITableView *)tableView
        cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSUInteger section = [indexPath section];
    NSString *key = [keys objectAtIndex: section];
    NSArray *nameSection = [names objectForKey:key];
    static NSString *SectionsTableIdentifier = @"SectionsTableIdentifier";
    static NSString *ChecklistCellIdentifier = @"ChecklistCellIdentifier "; 

    ChecklistCell *cell = (ChecklistCell *)[tableView 
                                            dequeueReusableCellWithIdentifier: SectionsTableIdentifier];
 if (cell == nil)  
 {
 NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ChecklistCell" 
 owner:self options:nil];
 for (id oneObject in nib)
 if ([oneObject isKindOfClass:[ChecklistCell class]])

cell = (ChecklistCell *)oneObject;
 }
 NSUInteger row = [indexPath row];
 NSDictionary *rowData = [self.keys objectAtIndex:row];

 NSString *tempString = [[NSString alloc]initWithFormat:@"%@",[nameSection objectAtIndex:row]];

NSLog(@"%@",tempString);  
cell.colorLabel.text = [tempArray objectAtIndex:0];
 cell.nameLabel.text = [tempArray objectAtIndex:1];
 return cell;


return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (cell.accessoryType == UITableViewCellAccessoryNone) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

-(NSString *)tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section{
    NSString *key = [keys objectAtIndex:section];
    return key;
}

Ответы [ 2 ]

0 голосов
/ 06 мая 2010

Нашел проблему. Это была (бессмысленная) строка кода. Убрал его и все заработало нормально.

NSDictionary * rowData = [self.keys objectAtIndex: row];

0 голосов
/ 04 мая 2010

В tableView: cellForRowAtIndexPath: вы делаете это:

NSDictionary *rowData = [self.keys objectAtIndex:row];

Это как минимум две проблемы:

  1. Исходя из вашей реализации numberOfSectionsInTableView: кажется, у вас есть один ключ на раздел. Этот код ищет ключ для каждой строки в текущем indexPath.section.

  2. В tableView: numberOfRowsInSection :, - [keys objectAtIndex:] возвращает NSString. Здесь вы рассматриваете это как NSDictionary.

...