tableView reloadData не работает - PullRequest
1 голос
/ 09 декабря 2011

У меня есть представление таблицы в приложении панели вкладок.

Я загружаю данные в viewDidLoad

managedObjectContext = nil;
managedObjectContext = [(RecipesAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"BrilliantMustache" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"badge.length > 0"];
[fetchRequest setPredicate:predicate];
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"badge" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1,sortDescriptor2, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"badge" cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor1 release];
[sortDescriptor2 release];
[sortDescriptors release];

Я пытаюсь перезагрузить данные в viewWillAppear

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

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

Всего есть 2 отдельных представления таблицы.Странно то, что первое табличное представление обновляется.

Есть мысли?Rob

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Вам нужно сделать то, что вы делаете в viewDidLoad в viewWillAppear. viewDidLoad вызывается только при запуске, поэтому, несмотря на изменение данных, ваше представление никогда не изменяет свои локальные данные, поэтому при вызове reloadData оно все еще использует старые данные.

Edit:

Что вы должны иметь:

- (void)viewWillAppear:(BOOL)animated {
    managedObjectContext = nil;
    managedObjectContext = [(RecipesAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"BrilliantMustache" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"badge.length > 0"];
    [fetchRequest setPredicate:predicate];
    NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"badge" ascending:YES];
    NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1,sortDescriptor2, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"badge" cacheName:nil];
    aFetchedResultsController.delegate = self;
    self.fetchedResultsController = aFetchedResultsController;
    [aFetchedResultsController release];
    [fetchRequest release];
    [sortDescriptor1 release];
    [sortDescriptor2 release];
    [sortDescriptors release];

    [self.tableView reloadData];
    [super viewWillAppear:animated];
}

- (void)viewDidLoad:(BOOL)animated {
    [super viewDidLoad:animated];
}
0 голосов
/ 09 декабря 2011

Правильно ли реализованы методы NSFetchedResultsControllerDelegate?FRC должен обрабатывать обновление таблицы, когда он получает уведомление об изменениях из контекста управляемого объекта ...

Редактировать: NSFetchedResultsController Ссылка на класс

...