0

他のプロジェクトで機能していたものに何らかの形で迷子になり、現在は機能しなくなっています。

クラス kClassCycleQuestionDetails のエンティティの NSFetchedResultsController を持つコントローラー (A) (NSObject のサブクラス) があります。私の ManagedObjectContext は NSMainQueueConcurrencyType で開始されます。

別のコントローラー (B) では、上記のクラスのエンティティの挿入を開始し、10 個ごとのオブジェクトの保存を開始します。

[self.moc performBlock:^{
        [self prepareNewCycle];
    }];

コンテキストは NSManagedObjectContextDidSaveNotification (B で受信) を送信しますが- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller、A で呼び出されたコントローラーのデリゲート メソッドは表示されません。

両方のコントローラーが同じ管理対象オブジェクト コンテキストを共有しているため、モデルの変更が表示されるはずです?!

誰にもアイデアがあります。

編集: 明確化のために: prepareNewCycle はサイクル エンティティをコンテキストに挿入し、kClassCycleQuestionDetails のエンティティをサイクル エンティティに追加します (対多関係)。

コントローラー A の fetchedResultsController のコードは次のとおりです。

- (NSFetchedResultsController *)fetchedResultsController {

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

/*
 Set up the fetched results controller.
 */
// Create the fetch request for the entity
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:kClassCycleQuestionDetails inManagedObjectContext:self.moc];
[fetchRequest setEntity:entity];

// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];

[fetchRequest setPredicate:[self predicateForExamCycleMode:self.cycle.examQuestionModeValue cycleId:self.cycle.cycle_id]];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:kQCQDCycleQuestionDetails_id ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

[fetchRequest setSortDescriptors:sortDescriptors];

// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc]
                                                         initWithFetchRequest:fetchRequest
                                                         managedObjectContext:self.moc
                                                         sectionNameKeyPath:nil
                                                         cacheName:NSStringFromClass([self class])];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;


[NSFetchedResultsController deleteCacheWithName:NSStringFromClass([self class])];
NSError *error = nil;
if (![_fetchedResultsController performFetch:&error]) {
    ALog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

return _fetchedResultsController;

}

4

0 に答える 0