Заполнение UITableView из NSMutableArray - PullRequest
2 голосов
/ 27 июля 2011

У меня странная проблема с этим кодом.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }


    // Configure the cell...
    if (accounts != nil) {
        NSLog(@"Cell: %@", indexPath.row);
        cell.textLabel.text = [self.accounts objectAtIndex: indexPath.row];
    }
    else
    {
        NSLog(@"No cells!");
        [cell.textLabel setText:@"No Accounts"];
    }

    return cell;
}

Мое табличное представление заполняется очень хорошо, за исключением того, что все строки содержат первый элемент в моих NSMutableArray, accounts.Я регистрирую значение indexPath.row, и оно остается равным (нулю) независимо от того, сколько значений в массиве.Я что-то здесь не так делаю?

Ответы [ 2 ]

3 голосов
/ 27 июля 2011

Я не верю этому! Я бью себя по голове за то, что не нашел этого раньше!

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [accounts count]; //<--This is wrong!!!
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 1; // <--This needs to be switched with the error above
}

Приведенный выше код был причиной того, что он печатал одну и ту же строку в моем массиве дважды, а не шел вперед в моем массиве.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [accounts count];
}

Этот код правильный и дает правильный результат. Что за хлопот! ^^;

2 голосов
/ 27 июля 2011

Должно быть @"%i", indexPath.row, а не @"%@", indexPath.row

Также я рекомендую поставить это в верхней части вашего метода:

NSUInteger row = [indexPath row];

Тогда ваш метод выглядит так:

// Cell Ident Stuff
// Then configure cell
if (accounts) {
    NSLog(@"Cell: %i", row);
    cell.textLabel.text = [self.accounts objectAtIndex:row];
}
else {
    NSLog(@"No accounts!");
    // Only setting for the first row looks nicer:
    if (row == 0) cell.textLabel.text = @"No Accounts"; 
}

Это хорошая практика при работе с методами табличного представления. Попробуйте это.

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