Ошибка утверждения в UICollectionView

Я использую UICollectionView в своем приложении iOS, и иногда приложение вылетает с ошибкой утверждения в моем представлении коллекции. Я отлаживаю его, и это похоже на утверждение UIKit (это не проблема количества секций или количества ячеек)

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

Показываю свой код:

            var indexPaths : [IndexPath] = [IndexPath]()

            for issue in issuesLoaded
            {
                let position : Int = IssueManager.sharedInstance.getPositionOfIssue(rubricId: self.rubricId!,
                                                                                    contentId: issue.contentId!)

                let indexPath : IndexPath = IndexPath(row: position, section: 0)
                indexPaths.append(indexPath)

                if (position <= self.issues.count - 1)
                {
                    self.issues.insert(issue, at: position)
                }
                else
                {
                    self.issues.append(issue)
                }
            }

            self.collectionView.insertItems(at: indexPaths)

            self.isLoading = false
            self.collectionView.collectionViewLayout.invalidateLayout()

Крашлог:

*** Assertion failure in -[UICollectionView _endItemAnimationsWithInvalidationContext:tentativelyForReordering:animator:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3698.54.4/UICollectionView.m:5867

И stackTrace:

> Thread 1 Queue : com.apple.main-thread (serial)
> #0    0x00000001833a92e0 in __pthread_kill ()
> #1    0x000000018354a288 in pthread_kill$VARIANT$mp ()
> #2    0x0000000183317d0c in abort ()
> #3    0x0000000103c68b0c in uncaught_exception_handler ()
> #4    0x00000001839231c8 in __handleUncaughtException ()
> #5    0x0000000182adc8c8 in _objc_terminate() ()
> #6    0x0000000182acd37c in std::__terminate(void (*)()) ()
> #7    0x0000000182accccc in __cxa_throw ()
> #8    0x0000000182adc720 in objc_exception_throw ()
> #9    0x0000000183922bf8 in +[NSException raise:format:arguments:] ()
> #10   0x0000000184312fa0 in -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] ()
> #11   0x000000018d67b240 in -[UICollectionView _endItemAnimationsWithInvalidationContext:tentativelyForReordering:animator:]
> ()
> #12   0x000000018d679844 in -[UICollectionView _updateRowsAtIndexPaths:updateAction:updates:] ()
> #13   0x000000018d679434 in -[UICollectionView insertItemsAtIndexPaths:] ()
> #14   0x00000001027a1f8c in closure #1 in ContentViewCell.loadNextIssues() at
> /Users/username/Project/Views/ContentViewCell.swift:167
> #15   0x00000001029ddc3c in closure #1 in closure #1 in closure #2 in closure #1 in closure #1 in closure #1 in
> IssueManager.getIssueForContentIds(contentIds:completionHandler:) at
> /Users/username/Project/Manager/IssueManager.swift:684
> #16   0x0000000102787b68 in thunk for @escaping @callee_guaranteed () -> () ()
> #17   0x00000001049c11dc in _dispatch_call_block_and_release ()
> #18   0x00000001049c119c in _dispatch_client_callout ()
> #19   0x00000001049c5d2c in _dispatch_main_queue_callback_4CF ()
> #20   0x00000001838cb070 in __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ ()
> #21   0x00000001838c8bc8 in __CFRunLoopRun ()
> #22   0x00000001837e8da8 in CFRunLoopRunSpecific ()
> #23   0x00000001857ce020 in GSEventRunModal ()
> #24   0x000000018d808758 in UIApplicationMain ()
> #25   0x000000010299d1a4 in main at /Users/username/Project/AppDelegate.swift:15

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

Может быть, этот блок кода вызывается слишком часто, слишком быстро один за другим, так что предыдущий self.collectionView.insertItems(at: indexPaths) не завершился до повторного вызова?

Thomas 26.09.2018 15:20

Да, я использую защиту, чтобы избежать этой проблемы, но проблема не устранена

user3281706 27.09.2018 14:19

Пробовали с блоком пакетного обновления? func performBatchUpdates(_ updates: (() -> Void)?, completion: ((Bool) -> Void)? = nil) С его помощью вы можете выполнять несколько операций вставки, удаления, перезагрузки или перемещения одновременно, вместо того, чтобы делать их по отдельности!

Thomas 27.09.2018 15:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
869
1

Ответы 1

попробуйте перезагрузить collectionView после каждой вставки

Да, но я хочу избежать перезагрузки коллекции, чтобы изображение не мигало.

user3281706 27.09.2018 14:20

вы пробовали перезагрузить определенные пути к индексам? попробуйте это .. collectionView.reloadItemsAtIndexPaths (myArrayOfIndexPaths)

Sanad Barjawi 28.09.2018 12:02

Другие вопросы по теме