UITableView обновляет только последнюю ячейку. Он отображает всю информацию для остальных 15, но обновляет только 16-ю ячейку при вызове NSTimer

Я создаю приложение, которое отображает расстояние и курс до здания из местоположения пользователя. Все отлично работает и прекрасно обновляется для последней ячейки. Отображение изменений как расстояния, так и изображения курса. Однако первые 15 ячеек после того, как начальный cellForRowAtIndexPath создает их, не обновляются. Обновление вызывается для NSTimer каждую 1 секунду, которая перезагружает tableView. Я попытался использовать теги и запустить его без тегов. Ниже мой код. Я ценю любую помощь.

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

    static int locationTags[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

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

        CNULocation * curLocation = [self.locationArray objectAtIndex:[indexPath row]];

        //NSLog(@"@@@@@ LOCATION IS : %@", curLocation.name);

        coord.latitude = curLocation.location.latitude;
        coord.longitude = curLocation.location.longitude;

        cell.textLabel.text = [curLocation name];
        cell.imageView.image = [curLocation icon];

        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
            dist = [[UILabel alloc] initWithFrame:CGRectMake(180,10,180,24)];
            imgView = [[UIImageView alloc] initWithFrame:CGRectMake(290,10,24,24)];

        } else {
            dist = [[UILabel alloc] initWithFrame:CGRectMake(440,10,180,24)];
            imgView = [[UIImageView alloc] initWithFrame:CGRectMake(640,10,24,24)];
        }
        [imgView setImage:[UIImage imageNamed:@"193-location-arrow copy.png"]];


        atloc = false;
        GeoAngle = [self setLatLonForDistanceAndAngle:userLoc];
        imgView.transform=CGAffineTransformMakeRotation((direction* M_PI / 180)+ GeoAngle);


        dist.opaque = false;
        if(boolyard && !atloc){
            dist.text = [[NSString alloc] initWithFormat:@"%.02f yards",distance];
            //NSLog(@"@@@@@@@Distance in yards@@@@@@@: %f", distance);
        }else if(!boolyard && !atloc) {
            dist.text = [[NSString alloc] initWithFormat:@"%.02f feet",distance];
            //NSLog(@"@@@@@@@Distance in feet@@@@@@@: %f", distance);
        }else if(atloc){
            dist.text = @"You are here!";
            [imgView setImage:nil];
        }

        dist.backgroundColor = [UIColor clearColor];
        dist.textAlignment   = UITextAlignmentRight;

        if (tags > 15) {
            tags = 0;
        }
        int ViewTags = locationTags[tags];
        cell.tag = ViewTags;
        tags++;
        //NSLog(@"Tags: %i",tags);
        dist.tag= ViewTags;
        imgView.tag = ViewTags;

        [cell.contentView addSubview:imgView];
        [cell.contentView addSubview:dist];

    }else {

        if (tags > 15) {
            tags = 0;
        }

        int ViewTags = locationTags[tags];
        cell.tag = ViewTags;
        tags++;
        imgView.tag = ViewTags;
        dist.tag=ViewTags;

        dist.opaque = true;
        imgView.opaque = true;

        //[imgView setImage:[UIImage imageNamed:@"193-location-arrow copy.png"]];

        GeoAngle = [self setLatLonForDistanceAndAngle:userLoc];
        imgView.transform=CGAffineTransformMakeRotation((direction* M_PI / 180)+ GeoAngle);



        if(boolyard && !atloc){
            dist.text = [[NSString alloc] initWithFormat:@"%.02f yards",distance];
            //NSLog(@"@@@@@@@Distance in yards@@@@@@@: %f", distance);
        }else if(!boolyard && !atloc) {
            dist.text = [[NSString alloc] initWithFormat:@"%.02f feet",distance];
            //NSLog(@"@@@@@@@Distance in feet@@@@@@@: %f", distance);
        }else if(atloc){
            dist.text = @"You are here!";
            [imgView setImage:nil];
        }

    }   

    //boolyard = true;
    //atloc = false;
    return cell;
}

1 ответ

Решение

Я считаю, что "еще" не должно быть здесь.

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

...
    } else {
...
}
Другие вопросы по тегам