2

Я использую этот gist для FRC и UICollectionView. Это работало нормально до iOS 9.iOS 10: NSFetchedResultsController + UICollectionView, SIGABRT on performBatchUpdates

Теперь в прошивке 10 иногда мое приложение падения с грохотом SIGABRT сигнала на performBatchUpdates из collectionview. Даже если CollectionView выходит из крушения, он попадает в кому с 1 или 2 ячейками.

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{ 
    // Checks if we should reload the collection view to fix a bug @ http://openradar.appspot.com/12954582 
    if (self.shouldReloadCollectionView) { 
     [self.collectionView reloadData]; 
    } else { 
     [self.collectionView performBatchUpdates:^{ // CRASH : Thread 1: signal SIGABRT 
      [self.blockOperation start]; 
     } completion:nil]; 
    } 
} 

Это происходит из-за новой усовершенствованной функциональностью UICollectionView? В чем проблема?

+0

Для тех, кто борется за ошибку в iOS 10, при использовании библиотеки/фотографий/мультимедиа приложение может сбой с помощью SIGABORT. Вам нужно добавить некоторые ключи в Info.plist, проверить [эту ссылку.] (Http://stackoverflow.com/a/39631642/1223728) – Borzh

ответ

1

После некоторого исследования найдено исправление для этого. Мое приложение извлекает данные с веб-сервера и вставляет его с помощью Основная тема.

Я предположил, что этот сигнал поднимается из-за какого-то недействительного манипулирования данными. Поскольку я сомневался controllerDidChangeContent (Основная тема) Делегат получает вызов, как только поток начинает сохранять данные. [self.managedObjectContext save:&savingError];

Этот ранний вызов вызывает performBatchUpdates, чтобы обрабатывать данные в середине процесса сохранения, что приводит к сбою.

Ввод кода controllerDidChangeContent внутри dispatch_async устранен авария и состояние комы CollectionView. Я надеюсь, что это помогает кому-то.

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     // Checks if we should reload the collection view to fix a bug @ http://openradar.appspot.com/12954582 
     if (self.shouldReloadCollectionView) { 
      [self.collectionView reloadData]; 
     } else { 
      [self.collectionView performBatchUpdates:^{ // No crash :) 
       [self.blockOperation start]; 
      } completion:nil]; 
     } 
    }); 
} 
+0

Спасибо, что поделились своими открытиями. У меня аналогичная проблема в iOS10 и Swift 3. Я уже три недели пытался узнать, что происходит, и я с ума сошел от него. Пробовал исправить, я тоже не работал. Очевидно, что это связано с изменениями в CoreData. Однако я делаю все изменения в фоновом контексте. Перемещение всех операций CoreData в основной контекст тоже не помогает. Возможно, это связано с версией CoreData Context. – Lweek