“重新加载表”时单元格的字符串文本未被更新

时间:2011-06-04 01:24:48

标签: iphone objective-c uitableview nsfetchedresultscontroller

我的单元格的字符串文本(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 :(得分:0)

我想,您可能会看到新添加的行的图像。但不是文本因为你的代码中没有对它的支持。

在您的代码中,您始终在创建新单元格,请尝试使用以下代码重复使用单元格。

- (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;
}