2

私はスタンフォードコースcs193pのCoreDataTableViewControllerを使用しており、viewWillAppearで呼び出します

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                    managedObjectContext:self.dataBase.managedObjectContext
                                                                      sectionNameKeyPath:nil
                                                                               cacheName:nil];

これにより、ランダムにアプリがフリーズします(クラッシュせず、フリーズするだけです)。CoreDataTableViewController で、セッターは次のように [self performFetch] を呼び出します。

- (void)performFetch
{
    if (self.fetchedResultsController) {
        if (self.fetchedResultsController.fetchRequest.predicate) {
            if (self.debug) NSLog(@"[%@ %@] fetching %@ with predicate: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), self.fetchedResultsController.fetchRequest.entityName, self.fetchedResultsController.fetchRequest.predicate);
        } else {
            if (self.debug) NSLog(@"[%@ %@] fetching all %@ (i.e., no predicate)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), self.fetchedResultsController.fetchRequest.entityName);
        }
        NSError *error;
        NSLog(@"before");
        [self.fetchedResultsController performFetch:&error];
        NSLog(@"after");
        if (error) NSLog(@"[%@ %@] %@ (%@)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), [error localizedDescription], [error localizedFailureReason]);
    } else {
        if (self.debug) NSLog(@"[%@ %@] no NSFetchedResultsController (yet?)", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
    }
    [self.tableView reloadData];
}

そして、それが引っかかる行は

[self.fetchedResultsController performFetch:&error];

助言がありますか?

4

2 に答える 2

0

この呼び出しはバックグラウンド スレッドで発生するため、GUI がハングすることはありません。したがって、GUI がハングしている場合は、別の問題です。

そうは言っても、通常の操作でそれを呼び出す必要はありません。通常、UIManagedDocument に変更を保存するには、次の 2 つのいずれかを行う必要があります。

元に戻すマネージャーを使用するか、呼び出します

[doc updateChangeCount: UIDocumentChangeDone];
于 2012-04-14T21:20:14.393 に答える