Базовые данные: извлеченный контроллер результатов, вызывающий чрезмерный выпуск / сбой - PullRequest
0 голосов
/ 18 ноября 2011

Я использую core data, и у меня есть UITableViewController, который загружает данные из core data.Это modal view, и если я загружаю модальное представление в третий раз, он вылетает с EXC_BAD_ACCESS.

- (NSFetchedResultsController *)fetchedResultsController {

    if (fetchedResultsController != nil) {
        return fetchedResultsController;
    }

    // Create and configure a fetch request
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Ride" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

    // Create the sort descriptors array
    NSSortDescriptor *sectionTitle = [[NSSortDescriptor alloc] initWithKey:@"dateStart" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sectionTitle, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

    // Create and initialize the fetch results controller
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
    self.fetchedResultsController = aFetchedResultsController;
    fetchedResultsController.delegate = self;

    // Memory management
    [aFetchedResultsController release];
    [fetchRequest release];
    [sectionTitle release];
    [sortDescriptors release];

    return fetchedResultsController;

}//end

В сбое говорится, что оно исходит из этой строки:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Ride" inManagedObjectContext:managedObjectContext];

Это viewDidLoad:

if (managedObjectContext == nil) { 
        managedObjectContext = [MyAppDelegate instance].managedObjectContext; 
    }

Представление модального представления:

History *history = [[[History alloc] init] autorelease];
UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:history] autorelease];
[self presentModalViewController:nav animated:YES];

Отклонение модального вида:

- (void)done {
    [self dismissModalViewControllerAnimated:YES];
}

Трассировка стека, которая дает EXC_BAD_ACCESS:

enter image description here

Теперь, чтобы настроить это представление с основными данными, я последовал примеру проекта Core Data Books, и мой код выглядит практически идентично.Почему после нескольких загрузок модального режима происходит сбой?

1 Ответ

0 голосов
/ 18 ноября 2011

Хорошо, я понял, что мой managedObjectContext не был сохранен, потому что я не использовал self. Итак, я исправил это, выполнив:

// Core Data
if (managedObjectContext == nil) { 
    self.managedObjectContext = [MyAppDelegate instance].managedObjectContext; 
}
...