Сбой в PerformBatchUpdates при обновлении CollectionView ⇐ IOS
-
Гость
Сбой в PerformBatchUpdates при обновлении CollectionView
У меня есть следующая трассировка стека:
Трассировка последнего исключения: 0 CoreFoundation 0x1d2bbde88 __ExceptionPreprocess + 164 (NSException.m:202) 1 libobjc.A.dylib 0x1cbef78d8 objc_Exception_throw + 60 (objc-Exception.mm:356) 2 Foundation 0x1cd4e5b4c -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 188 (NSException.m:242) 3 UIKitCore 0x1d5082998 -[UICollectionView _endItemAnimationsWithInvalidationContext:tentativelyForReordering:animator:collectionViewAnimator:] + 3964 (UICollectionView.m:9492) 4 UIKitCore 0x1d4fe17bc -[UICollectionView _performBatchUpdates:completion:invalidationContext:tentativelyForReordering:animator:animationHandler:] + 520 (UICollectionView.m:11824) 5 FieldService 0x1006f2f0c специализированный EditLatestNewsListViewController.controllerDidChangeContent(_:) + 276 (EditLatestNewsListViewController.swift:170) 6 FieldService 0x1006f1920 EditLatestNewsListViewController.controllerDidChangeContent(_:) + 4 (:0) 7 FieldService 0x1006f1920 @objc EditLatestNewsListViewController.controllerDidChangeContent(_:) + 48 8 CoreData 0x1da3f0c04 __82-[NSFetchedResultsController(PrivateMethods) _core_managedObjectContextDidChange:]_block_invoke + 5576 (NSFetchedResultsController.m:2329) 9 CoreData 0x1da4147e8 DeveloperSubmitedBlockToNSManagedObjectContextPerform + 156 (NSManagedObjectContext.m:3964) 10 CoreData 0x1da414338 -[NSManagedObjectContext PerformBlockAndWait:] + 208 (NSManagedObjectContext.m:4075) 11 CoreData 0x1da3f2c98 -[NSFetchedResultsController _core_managedObjectContextDidChange:] + 124 (NSFetchedResultsController.m:2363) 12 CoreFoundation 0x1d2beb404 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 148 (CFNotificationCenter.c:661) 13 CoreFoundation 0x1d2c92474 ___CFXRegistrationPost_block_invoke + 88 (CFNotificationCenter.c:175) 14 CoreFoundation 0x1d2c75724 _CFXRegistrationPost + 440 (CFNotificationCenter.c:201) 15 CoreFoundation 0x1d2bffa08 _CFXNotificationPost + 704 (CFNotificationCenter.c:1193) 16 Foundation 0x1ccffcffc -[NSNotificationCenter postNotificationName:object:userInfo:] + 92 (NSNotification.m:518) 17 CoreData 0x1da40cd70 -[NSManagedObjectContext _createAndPostChangeNotification:удаления:обновления:обновления:отсрочки:wasMerge:] + 1796 (NSManagedObjectContext.m:8631) 18 CoreData 0x1da4214bc -[NSManagedObjectContext _processRecentChanges:] + 2508 (NSManagedObjectContext.m:7722) 19 CoreData 0x1da40c518 -[NSManagedObjectContext _mergeChangesFromDidSaveDictionary:usingObjectIDs:] + 3576 (NSManagedObjectContext.m:3701) 20 CoreData 0x1da4154d8 -[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:] + 376 (NSManagedObjectContext.m:3730) 21 MagicalRecord 0x10237f228 +[NSManagedObjectContext(MagicalRecord) rootContextDidSave:] + 448 (NSManagedObjectContext+MagicalRecord.m:236) 22 libdispatch.dylib 0x1da18c4b4 _dispatch_call_block_and_release + 32 (init.c:1518) 23 libdispatch.dylib 0x1da18dfdc _dispatch_client_callout + 20 (object.m:560) 24 libdispatch.dylib 0x1da19c7f4 _dispatch_main_queue_drain + 928 (inline_internal.h:2632) 25 libdispatch.dylib 0x1da19c444 _dispatch_main_queue_callback_4CF + 44 (queue.c:7887) 26 CoreFoundation 0x1d2c4e6f8 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 (CFRunLoop.c:1780) 27 CoreFoundation 0x1d2c30058 __CFRunLoopRun + 2036 (CFRunLoop.c:3147) 28 CoreFoundation 0x1d2c34ed4 CFRunLoopRunSpecific + 612 (CFRunLoop.c:3418) 29 GraphicsServices 0x20bf36368 GSEventRunModal + 164 (GSEvent.c:2196) 30 UIKitCore 0x1d51133d0 -[UIApplication _run] + 888 (UIApplication.m:3745) 31 UIKitCore 0x1d5113034 UIApplicationMain + 340 (UIApplication.m:5335) 32 FieldService 0x1005c3214 основной + 68 (AppDelegate.swift:20) 33 dyld 0x1f12a0960 начало + 2528 (dyldMain.cpp:1170)
Вот как это выглядит controllerDidChangeContent:
частная коллекция varViewChanges = [[NSFetchedResultsChangeType: [IndexPath]]]() func контроллерDidChangeContent (_ контроллер: NSFetchedResultsController) { CollectionView?.performBatchUpdates({ [weak self] в если let CollectionViewChanges = self?.collectionViewChanges { для коллекцииViewChange в коллекцииViewChanges { for (type, indexPaths) в коллекцииViewChange { тип переключателя { случай .вставка: self?.collectionView?.insertItems(at: indexPaths) случай .удалить: self?.collectionView?.deleteItems(at: indexPaths) случай .обновление: self?.collectionView?.reloadItems(at: indexPaths) случай .переместить: если пусть indexPath = indexPaths.first, пусть newIndexPath = indexPaths.last { self?.collectionView?.moveItem(at: indexPath, to: newIndexPath) } } } } } делегат?.contentDidChange() обновлениеView() }) }
У меня есть следующая трассировка стека:
Трассировка последнего исключения: 0 CoreFoundation 0x1d2bbde88 __ExceptionPreprocess + 164 (NSException.m:202) 1 libobjc.A.dylib 0x1cbef78d8 objc_Exception_throw + 60 (objc-Exception.mm:356) 2 Foundation 0x1cd4e5b4c -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 188 (NSException.m:242) 3 UIKitCore 0x1d5082998 -[UICollectionView _endItemAnimationsWithInvalidationContext:tentativelyForReordering:animator:collectionViewAnimator:] + 3964 (UICollectionView.m:9492) 4 UIKitCore 0x1d4fe17bc -[UICollectionView _performBatchUpdates:completion:invalidationContext:tentativelyForReordering:animator:animationHandler:] + 520 (UICollectionView.m:11824) 5 FieldService 0x1006f2f0c специализированный EditLatestNewsListViewController.controllerDidChangeContent(_:) + 276 (EditLatestNewsListViewController.swift:170) 6 FieldService 0x1006f1920 EditLatestNewsListViewController.controllerDidChangeContent(_:) + 4 (:0) 7 FieldService 0x1006f1920 @objc EditLatestNewsListViewController.controllerDidChangeContent(_:) + 48 8 CoreData 0x1da3f0c04 __82-[NSFetchedResultsController(PrivateMethods) _core_managedObjectContextDidChange:]_block_invoke + 5576 (NSFetchedResultsController.m:2329) 9 CoreData 0x1da4147e8 DeveloperSubmitedBlockToNSManagedObjectContextPerform + 156 (NSManagedObjectContext.m:3964) 10 CoreData 0x1da414338 -[NSManagedObjectContext PerformBlockAndWait:] + 208 (NSManagedObjectContext.m:4075) 11 CoreData 0x1da3f2c98 -[NSFetchedResultsController _core_managedObjectContextDidChange:] + 124 (NSFetchedResultsController.m:2363) 12 CoreFoundation 0x1d2beb404 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 148 (CFNotificationCenter.c:661) 13 CoreFoundation 0x1d2c92474 ___CFXRegistrationPost_block_invoke + 88 (CFNotificationCenter.c:175) 14 CoreFoundation 0x1d2c75724 _CFXRegistrationPost + 440 (CFNotificationCenter.c:201) 15 CoreFoundation 0x1d2bffa08 _CFXNotificationPost + 704 (CFNotificationCenter.c:1193) 16 Foundation 0x1ccffcffc -[NSNotificationCenter postNotificationName:object:userInfo:] + 92 (NSNotification.m:518) 17 CoreData 0x1da40cd70 -[NSManagedObjectContext _createAndPostChangeNotification:удаления:обновления:обновления:отсрочки:wasMerge:] + 1796 (NSManagedObjectContext.m:8631) 18 CoreData 0x1da4214bc -[NSManagedObjectContext _processRecentChanges:] + 2508 (NSManagedObjectContext.m:7722) 19 CoreData 0x1da40c518 -[NSManagedObjectContext _mergeChangesFromDidSaveDictionary:usingObjectIDs:] + 3576 (NSManagedObjectContext.m:3701) 20 CoreData 0x1da4154d8 -[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:] + 376 (NSManagedObjectContext.m:3730) 21 MagicalRecord 0x10237f228 +[NSManagedObjectContext(MagicalRecord) rootContextDidSave:] + 448 (NSManagedObjectContext+MagicalRecord.m:236) 22 libdispatch.dylib 0x1da18c4b4 _dispatch_call_block_and_release + 32 (init.c:1518) 23 libdispatch.dylib 0x1da18dfdc _dispatch_client_callout + 20 (object.m:560) 24 libdispatch.dylib 0x1da19c7f4 _dispatch_main_queue_drain + 928 (inline_internal.h:2632) 25 libdispatch.dylib 0x1da19c444 _dispatch_main_queue_callback_4CF + 44 (queue.c:7887) 26 CoreFoundation 0x1d2c4e6f8 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 (CFRunLoop.c:1780) 27 CoreFoundation 0x1d2c30058 __CFRunLoopRun + 2036 (CFRunLoop.c:3147) 28 CoreFoundation 0x1d2c34ed4 CFRunLoopRunSpecific + 612 (CFRunLoop.c:3418) 29 GraphicsServices 0x20bf36368 GSEventRunModal + 164 (GSEvent.c:2196) 30 UIKitCore 0x1d51133d0 -[UIApplication _run] + 888 (UIApplication.m:3745) 31 UIKitCore 0x1d5113034 UIApplicationMain + 340 (UIApplication.m:5335) 32 FieldService 0x1005c3214 основной + 68 (AppDelegate.swift:20) 33 dyld 0x1f12a0960 начало + 2528 (dyldMain.cpp:1170)
Вот как это выглядит controllerDidChangeContent:
частная коллекция varViewChanges = [[NSFetchedResultsChangeType: [IndexPath]]]() func контроллерDidChangeContent (_ контроллер: NSFetchedResultsController) { CollectionView?.performBatchUpdates({ [weak self] в если let CollectionViewChanges = self?.collectionViewChanges { для коллекцииViewChange в коллекцииViewChanges { for (type, indexPaths) в коллекцииViewChange { тип переключателя { случай .вставка: self?.collectionView?.insertItems(at: indexPaths) случай .удалить: self?.collectionView?.deleteItems(at: indexPaths) случай .обновление: self?.collectionView?.reloadItems(at: indexPaths) случай .переместить: если пусть indexPath = indexPaths.first, пусть newIndexPath = indexPaths.last { self?.collectionView?.moveItem(at: indexPath, to: newIndexPath) } } } } } делегат?.contentDidChange() обновлениеView() }) }
Мобильная версия