UITableView показывает только данные из JSON, когда я прокручиваю вверх и вниз - PullRequest
2 голосов
/ 21 марта 2012

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

Как показать ячейки с данными без прокрутки?

- (void)requestFinished:(ASIHTTPRequest *)request
{    
    if (request.responseStatusCode == 400) {
        NSLog( @"Code already used");

    } else if (request.responseStatusCode == 403) {
        NSLog( @"Code already used");

    } else if (request.responseStatusCode == 200) {
        NSLog(@"%@",[request responseString]);
        NSString *response = [request responseString];
        const char *convert = [response UTF8String];
        NSString *responseString = [NSString stringWithUTF8String:convert];
        responseArray  = [responseString JSONValue];
        Nrows = [responseArray count];

    }
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    NSDictionary *dict = [responseArray objectAtIndex:indexPath.row];
    cell.detailTextLabel.text = [dict objectForKey:@"allfeeds"];
    cell.textLabel.adjustsFontSizeToFitWidth = YES;
    cell.textLabel.font = [UIFont systemFontOfSize:12];
    cell.textLabel.minimumFontSize = 10;
    cell.textLabel.numberOfLines = 4;
    cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
    cell.textLabel.text = [dict objectForKey:@"allfeeds2"];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;
}   

Ответы [ 4 ]

2 голосов
/ 22 марта 2012

Когда вы завершите запрос и зададите массив, обязательно вызовите [self.tableView reloadData];

. В целях производительности и анимации представления таблиц не перезагружают свои данные при изменении источника.

1 голос
/ 22 марта 2012

Вместо того, чтобы запускать запрос асинхронно (не блокируя)

[request startAsynchronously];

Попробуйте сделать это синхронно (блокировка)

[request startSynchronously];
0 голосов
/ 22 марта 2012

Эти проблемы обычно вызваны кешем UITableView, который удаляет из очереди доступный кешированный UITableViewCell с тем же CellIdentifier (в вашем случае - @ «Cell»).клетки вашего стола.Вы можете создать эту дисперсию, используя параметр NSIndexPath, следующим образом:

NSString* cellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row];

Это, конечно, при условии, что вы не меняете содержимое своих ячеек после загрузки данных.

0 голосов
/ 21 марта 2012

У меня была похожая проблема, и я получил ответ на форумах разработчиков Apple некоторое время назад, это решило мою проблему:

Из того, что вы описали, я думаю, что проблема большескорее всего, находится в cellForRowAtIndexPath или там, где вы делаете фактическую настройку ячейки, чем в опубликованном вами коде.Подобная ваша проблема может возникнуть, когда dequeueReusableCellWithIdentifier возвращает вам существующую ячейку, но вы не полностью сбросите ее существующее состояние.

Полный вопрос и ответы можно найти здесь (требуется вход в систему): https://devforums.apple.com/message/502483#502483

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