12

NSFetchedResultsControllerアプリケーションにリストをロードするために述語を使用しDocumentsています。Documents現在アクティブなものを除くすべてをロードしたい。

Rentzsch のMOGeneratorを使用してクラスを作成し、_Documentすべてのカスタム コードをDocumentサブクラスに配置します。type のプロパティを_Document生成します。objectIDDocumentID

コントローラーを作成するクラスで、コントローラーの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 <NSSQLEntity Document id=1>'

一時的か永続的かにかかわらず、すべての NSManagedObjects に objectID があることを理解しています。そうではありませんか?何かご意見は?

4

1 に答える 1

10

述語を read に変更します

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

は、現在のドキュメントを表す の インスタンスcurrentDocへの参照です。NSManagedObject

Core Data は内部的に等価性チェックを行います。

于 2010-03-22T16:52:55.540 に答える