Почему tableviewcell не обновляется? - PullRequest
1 голос
/ 03 августа 2011
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSString *country=[[NSUserDefaults standardUserDefaults]objectForKey:@"namecountry"];
//url's
NSURL *url = [NSURL URLWithString:@"someurl"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:country forKey:@"c_name"];
[request setRequestMethod:@"POST"];
[request setValidatesSecureCertificate:NO];
[request setDelegate:self];
[request startSynchronous];

NSString *response = [request responseString];
NSLog(@"%@",response);
res=[[response componentsSeparatedByString:@","] retain];
NSLog(@"%@",[res objectAtIndex:18]);
show=[NSString stringWithFormat:@"%@",[res objectAtIndex:18]];
float f=[show floatValue];
show=[NSString stringWithFormat:@"%.2f %%",f];
[show retain];
}

Это вторая вкладка, которая показывает информацию. Но когда я нажимаю на нее, она не обновляется, иногда она обновляется случайно, я думаю. Я хочу, чтобы она обновлялась каждый раз. И, пожалуйста, не говорите мне использовать [self .tableView reloadData]; Когда я нажимаю на значок панели вкладок, я знаю, что он вызывает этот метод, поэтому нет необходимости переписывать. Эта функция - мой viewDidAppear. Журнал Nslog дает обновленное значение правильно, поэтому он не обновляет ячейку таблицы.

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = nil;
if (indexPath.row % 2 == 0) {
    // EVEN
    cell = [tableView dequeueReusableCellWithIdentifier:@"EvenCell"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"EvenCell"] autorelease];
        UIView *bg = [[UIView alloc] initWithFrame:cell.frame];
        UIColor *colour = [[UIColor alloc] initWithRed: (208.0/255.f) green: (231.0/255.f) 
                                                  blue: (241.0/255.f) alpha: 1.0];
        bg.backgroundColor = colour; 
        cell.backgroundView = bg;
        cell.textLabel.backgroundColor = bg.backgroundColor;
        [bg release];
        cell.detailTextLabel.backgroundColor=[UIColor clearColor];
        cell.detailTextLabel.text=show;
    }
    cell.textLabel.text = [array objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

} else {
    // ODD

    cell = [tableView dequeueReusableCellWithIdentifier:@"OddCell"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"OddCell"] autorelease];
        UIView *bg = [[UIView alloc] initWithFrame:cell.frame];

        UIColor *colour = [[UIColor alloc] initWithRed: (143.0/255.f) green: (169.0/255.f) 
                                                  blue: (180.0/255.f) alpha: 1.0];
        bg.backgroundColor = colour;
        cell.backgroundView = bg;
        cell.textLabel.backgroundColor = bg.backgroundColor;
        [bg release];
    }
    cell.textLabel.text = [array objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;


 } 
 return cell;
}   

Это функция создания ячеек, которую я пишу cell.detailTextLabel.text = show; так что он может показать значение обновления, но, как я уже сказал, это случайное обновление или нет. Кто-нибудь может сказать мне, где проблема? Кстати, я не использую нечетную ячейку, пока это просто концепция.

1 Ответ

1 голос
/ 03 августа 2011

Нет проблем с сохранением этого кода, но если у вас проблемы с обновлением ячейки, вот что я бы попробовал, если бы это был мой код:

  1. Подтвердите, что cellForRowAtIndexPath выполняетсяназывается
  2. NSLog() результатами [array objectAtIndex:indexPath.row] непосредственно перед тем, как назначить его метке и подтвердить, что это значение является ожидаемым.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...