NSFetchedResultsController: дублированные строки

У меня странное поведение при использовании вторичного потока для обновления содержимого NSFetchedResultsController, и я хотел бы знать, что это обычная проблема, иначе я могу что-то делать не так.

I у меня есть централизованный NSManagedObjectContext, находящийся в моем основном объекте делегата, который используется и совместно используется всеми контроллерами представления. После загрузки таблицы путем выполнения выборки и вызова ее метода делегата в фоновом режиме запускается вторичный поток для обновления результатов. Однако и только в странных случаях при вставке новых записей они дублируются в табличном представлении. Если я выхожу и снова вхожу, повторяющиеся строки исчезают, что заставляет думать, что они существовали только в контексте управляемого объекта.

Вот следующие шаги:

  1. Фоновый поток NSOperation создает ограниченный контекст, связанный с тем же постоянным хранилище делегата главного приложения.
  2. Новый поток начинает прослушивание уведомлений NSManagedObjectContextDidSaveNotification.
  3. Новые строки удаляются, обновляются или вставляются во вторичный контекст, всегда вызывая сохранение при достижении некоторого размера пакета.
  4. При сохранении в фоновом режиме вызывается метод уведомления. централизованный селектор mergeChangesFromContextDidSaveNotification контекста в основном потоке, как показано ниже.

     - (void) mergeChanges: (NSNotification *) notification
     {
      NSManagedObjectContext * mainContext = [[appDelegate sharedDelegate] managedObjectContext];
    
      [mainContext performSelectorOnMainThread: @selector (mergeChangesFromContextDidSaveNotification :)
      withObject: уведомление
      waitUntilDone: NO];
     }
     
  5. После завершения операции слушатель удаляется, а вторичный контекст освобождается.

Кто-нибудь знает, в чем причина дублирования строк в моем табличном представлении и как это можно решить?

Спасибо за за вашу помощь.

7
задан MPelletier 8 June 2011 в 13:34
поделиться