iOS: [self.fetchedResultsController executeFetch: & error]; заставляет мое приложение зависать - PullRequest
0 голосов
/ 11 мая 2011

У меня есть UITableViewController, и я хочу передать его содержимым базовой модели данных. Однако, когда я получаю контент, мое приложение вылетает. Это метод init (я передаю ему NSManagedObjectContext).

- (id)initInManagedObjectContext:(NSManagedObjectContext *)context
{
    self = [super initWithStyle:UITableViewStylePlain];

    if (self) {
        NSFetchRequest *request = [[NSFetchRequest alloc] init];
        request.entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:context];
        request.predicate = nil;    
        request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"idDoc" 
                                                                                     ascending:YES]];
         /*
         NSError *error = nil;
         NSManagedObject *retrievedDocument = [[context executeFetchRequest:request error:&error] lastObject];
         NSLog(@"retrievedDocument %@", retrievedDocument);
         */

        NSFetchedResultsController *frc = [[NSFetchedResultsController alloc]
                                             initWithFetchRequest:request 
                                             managedObjectContext:context 
                                               sectionNameKeyPath:nil 
                                                        cacheName:@"CollectionCache"];

        self.fetchedResultsController = frc;
        [frc release];
        [request release];


        //HERE IT CRASHES
        NSError *error;
        [self.fetchedResultsController performFetch:&error];

        if (error) {
            // Update to handle the error appropriately.
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            //exit(-1);  // Fail
        }

    }
    return self;
}

Я уверен, что контекст передается правильно, потому что если я раскомментирую закомментированный фрагмент, сохраненные данные будут правильно напечатаны.

Мне кажется, что что-то не так с fetchedResultsController.

спасибо

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

Исключение было связано с неправильным использованием performFetch:

Возвращает BOOL, который сообщает об успешном получении.Если вы получили НЕТ назад, вам разрешено проверить объект NSError.В противном случае вы не должны касаться этого.

Вероятно, следует использовать все методы, которые используют & error:

    NSError *error;
    if (![self.fetchedResultsController performFetch:&error]) {
        // Update to handle the error appropriately.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        //exit(-1);  // Fail
    }
0 голосов
/ 11 мая 2011

Исключение не было связано с fetchedResultsController, но из-за неинициализированного NSError

NSError * error = nil;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...