Базовые Данные: Keypath "objectID", не найденный в объекте

Я использую NSFetchedResultsController с предикатом для загрузки списка Documents в моем приложении. Я хочу загрузиться весь Documents кроме в настоящее время активного.

Я использую MOGenerator Rentzsch для создания a _Document класс и затем я вставил весь свой пользовательский код Document подкласс. _Document генерирует objectID свойство с типом DocumentID.

В классе, который создает контроллер, я установил контроллер currentDocID свойство:

controller.currentDocID = self.document.objectID;

В самом контроллере, я ленивая загрузка fetchedResultsController как это:

- (NSFetchedResultsController *)fetchedResultsController {
    if (fetchedResultsController != nil) {
        return fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(objectID != %@)", self.currentDocID];
    [fetchRequest setPredicate:predicate];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dateModified" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

    [fetchRequest setSortDescriptors:sortDescriptors];

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
    aFetchedResultsController.delegate = self;
    self.fetchedResultsController = aFetchedResultsController;

    [aFetchedResultsController release];
    [sortDescriptor release];
    [sortDescriptors release];

    return fetchedResultsController;
}

Когда fetchedResultsController загружается, мои сбои приложения с необработанным исключением:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath objectID not found in entity '

Это - мое понимание, что все NSManagedObjects имеют возраженный, или временный или постоянный. Этот не имеет место? Какие-либо мысли?

12
задан Martin Gordon 22 March 2010 в 14:48
поделиться

1 ответ

Измените свой предикат на

[NSPredicate predicateWithFormat:@"self != %@", [self currentDoc]]

, где currentDoc - это ссылка на экземпляр NSManagedObject , который представляет текущий документ.

Core Data выполнит внутреннюю проверку на равенство.

10
ответ дан 2 December 2019 в 22:22
поделиться