NSMutableOrderedSet lastObject Сбой NSRangeException - PullRequest
0 голосов
/ 08 февраля 2020

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

. В iOS13 мы получаем исключение NSRangeException cra sh в 50.000 сеансов. Cra sh Журналы:

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:]

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

MY-NSMutableOrderedSet lastObject

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

1 Ответ

0 голосов
/ 08 февраля 2020

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

...