Текст строки ячейки не обновляется при перезагрузке таблицы - PullRequest
0 голосов
/ 04 июня 2011

Текст строки моих ячеек (TDBadgedCell) обновляется только при редактировании данных в дочерней таблице таблицы.

Если я редактирую те же данные из другой вкладки, затем возвращаюсь к этой таблице, строкане будет обновляться, пока я не перезапущу приложение.

У меня также есть этот код:

- (void)viewWillAppear:(BOOL)animated
{
    [self refreshFetchedResultsController];
    [self.logTableView reloadData];
}

Редактировать:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    TDBadgedCell *cell = [[[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    [self configureCell:cell atIndexPath:indexPath];
    return cell;
}

- (void)configureCell:(TDBadgedCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
    cell.textLabel.textColor = [UIColor blackColor];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.textLabel.text = [logArray objectAtIndex:indexPath.row];
    cell.backgroundColor = [UIColor clearColor];
    cell.imageView.image = [UIImage imageNamed:@"17-bar-chart.png"];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"MMM d, y"]; 
    NSDate *date = nil;

    NSDate *today = [NSDate date]; 
    NSDate *thisWeek  = [today dateByAddingTimeInterval: -604800.0];
    NSDate *thisMonth = [today dateByAddingTimeInterval: -2629743.83];

    if (indexPath.row == 0)
    {
        date = [NSDate date]; 
        NSString *dateString = [dateFormatter stringFromDate:date]; 
        cell.badgeString = dateString;
    }
    else if (indexPath.row == 1)
    {
        if ([[self.fetchedResultsController fetchedObjects]count] > 1)
        {
            self.session = [[self.fetchedResultsController fetchedObjects]objectAtIndex:1];
            NSDate *date = self.session.timeStamp;
            NSString *dateString = [dateFormatter stringFromDate:date]; 
            cell.badgeString = dateString;
        }
        else
        {
            cell.badgeString = @"None";
        }
    }
    else if (indexPath.row == 2)
    {
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        [fetchRequest setPredicate: [NSPredicate predicateWithFormat:@"(timeStamp >= %@) AND (timeStamp <= %@)", thisWeek, today]];
        [fetchRequest setEntity:[NSEntityDescription entityForName:@"Session" inManagedObjectContext:managedObjectContext]];
        NSError *error = nil;
        NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
        NSLog(@"Fetch error: %@", error);

        cell.badgeString = [NSString stringWithFormat:@"%i", [results count]];
        [fetchRequest release];
    }
    else if (indexPath.row == 3)
    {
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"(timeStamp >= %@) AND (timeStamp <= %@)", thisMonth, today]];
        [fetchRequest setEntity:[NSEntityDescription entityForName:@"Session" inManagedObjectContext:managedObjectContext]];

        NSError *error = nil;
        NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
        NSLog(@"Fetch error: %@", error);

        cell.badgeString = [NSString stringWithFormat:@"%i", [results count]];
        [fetchRequest release];
    }
    else if (indexPath.row == 4)
    {
        cell.badgeString = [NSString stringWithFormat:@"%i", [[self.fetchedResultsController fetchedObjects] count]];
        NSLog(@"%i", [[self.fetchedResultsController fetchedObjects] count]);
    }

    UIImageView *myImageView = nil; 
    if (indexPath.row == 0 || indexPath.row == 1)
    {
        int myInt = cell.badgeString.length;
        if (myInt > 11)
        {
            myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"silvercell7.png"]];
        }
        else if (myInt < 5)
        {
            myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"silvercell9.png"]];
        }
        else
        {
            myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"silvercell8.png"]];
        }
    }
    else
    {
        myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"silvercell5.png"]];
    }

    [cell setBackgroundView:myImageView]; 
    [myImageView release];
    cell.badgeColor = [UIColor colorWithRed:24/255.0 green:83/255.0 blue:170/255.0 alpha:1.0];
    [cell.badge setNeedsDisplay];
    [dateFormatter release]; 
}

1 Ответ

0 голосов
/ 04 июня 2011

Думаю, вы сможете увидеть изображение для новой добавленной строки. Но не текст, потому что у вас нет поддержки этого в вашем коде.

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

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

    NSMutableString *CellIdentifier  = [[NSMutableString alloc] initWithCapacity:10]
    [CellIdentifier appendFormat:@"Cell_%d_%d",indexPath.section,indexPath.row];

    TDBadgedCell *cell =  (TDBadgedCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell ==  nil)
    {
        TDBadgedCell *cell = [[[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    }
    [self configureCell:cell atIndexPath:indexPath];
    return cell;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...