NSMutableOrderedSet lastObject NSRangeException崩溃

问题描述 投票:0回答:1

平均而言,我有一个NSMutableOrderedSet,其中每秒添加一个新的自定义对象。每次有新数据到达时,对lastObject的引用都会更新。同样在方法末尾,如果NSMutableOrderedSet计数大于300,则从NSMutableOrderedSet中删除第一个对象。全部在@ synchronized块中完成。

[在iOS13中,我们在50.000个会话中发生NSRangeException崩溃。崩溃日志:

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方法中如何发生这种崩溃。

ios objective-c xcode nsset nsrangeexception
1个回答
0
投票

目前,我通过将NSMutableOrderedSet转换为NSMutableArray摆脱了崩溃。我对其进行了测试,可以通过将其转换为NSMutableOrderedSet轻松将其在测试环境中崩溃。当type为NSMutableArray时,它不会崩溃。我认为这是与iOS 13相关的错误。

© www.soinside.com 2019 - 2024. All rights reserved.