Сбой NSMutableOrderedSet lastObject NSRangeException

В среднем у меня есть NSMutableOrderedSet, где каждую секунду добавляется новый пользовательский объект. Каждый раз, когда поступают новые данные, ссылка на lastObject обновляется. Также в конце метода, если количество NSMutableOrderedSet больше 300, первый объект удаляется из NSMutableOrderedSet. Все делается в блоке @synchronized.

В iOS13 мы получаем сбой NSRangeException через 50 000 сеансов. Журналы сбоев:

Fatal Exception: NSRangeException
*** -[__NSArrayM objectAtIndex:]: index 300 beyond bounds [0 .. 299]

0  CoreFoundation                  __exceptionPreprocess
1  libobjc.A.dylib                objc_exception_throw
2  CoreFoundation                 -[__NSCFString characterAtIndex:].cold.1
3  CoreFoundation                 _CFDataInit
4  xxxxxx                         -[xxx lastObject:]

С уменьшением временного интервала добавления данных мне удалось создать краш в тестовой среде. Сбой происходит именно в этой строке

MY-NSMutableOrderedSet lastObject

Как такой сбой может произойти в простом методе iOS, который возвращает последний объект в массиве.


person Batuhan Altun    schedule 08.02.2020    source источник


Ответы (1)


На данный момент я избавился от сбоя, превратив NSMutableOrderedSet в NSMutableArray. Я протестировал его, я могу легко сломать его в своей тестовой среде, превратив его в NSMutableOrderedSet. Когда тип — NSMutableArray, сбой не происходит. Я думаю, что это ошибка, связанная с iOS 13.

person Batuhan Altun    schedule 08.02.2020