NSRangeException - точка останова не дает мне никаких подсказок - PullRequest
0 голосов
/ 22 декабря 2018

Прошу прощения за любые ошибки, я увлекаюсь программированием и задаю вопрос новичку в SO, но приложил все усилия, чтобы отследить эту ошибку и не смог.

Я получаю сбой при перемещении между SKScenes, но только если приложение перешло в фоновый режим и было восстановлено из него.Также сбой происходит только на реальном устройстве, а не на симуляторе.Вывод из консоли такой:

2018-12-22 15:17:32.646668+0000 grabbit[22230:5424629] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM removeObjectsInRange:]: range {0, 2} extends beyond bounds [0 .. 0]'
*** First throw call stack:
(0x210febea0 0x2101bda40 0x210f63470 0x210ed32ac 0x2288df1a0 0x2288df438 0x2288b13d8 0x2101bc468 0x2101cc70c 0x2101cc774 0x22880fe18 0x1040764d4 0x2101bc468 0x2101cc70c 0x2101cc774 0x23e1e56cc 0x2288911e8 0x228845c5c 0x104076430 0x104076468 0x1040b92ec 0x1040b9390 0x22886c1b0 0x23e1f418c 0x23e1f53f0 0x23e1d46ec 0x23e2a057c 0x23e2a2f74 0x23e29ba64 0x210f7c1cc 0x210f7c14c 0x210f7ba30 0x210f768fc 0x210f761cc 0x2131ed584 0x23e1b9054 0x1040a9210 0x210a36bb4)
libc++abi.dylib: terminating with uncaught exception of type NSException

Я понял из этого, что где-то я пытаюсь получить доступ к несуществующему индексу в массиве, но я понятия не имею, где он находится.

Я искал в SO похожие ошибки и натолкнулся на совет активировать точки останова при возникновении исключения.Я сделал это, и код, кажется, ломается сразу после деинициализации «старой» сцены.Кажется, что исключение создается в потоке сразу после [SKScene dealloc].

Вот код, который, кажется, вызывает исключение (которое мне совсем не помогает!)

  deinit {
        print("Game Scene deinitialised")
    }

Означает ли это, что во время освобождения происходит что-то, что вызывает сбой?Я бы с удовольствием выложил несколько фрагментов кода, но не знаю, с чего начать.SKScene довольно сложный.

Вот как выглядит основной поток при сбое - # 17, очевидно, там, где все идет не так

#0  0x00000002101bda08 in objc_exception_throw ()
#1  0x0000000210f63470 in _CFThrowFormattedException ()
#2  0x0000000210ed32ac in -[__NSArrayM removeObjectsInRange:] ()
#3  0x00000002288df1a0 in -[SKSoundSource purgeCompletedBuffers] ()
#4  0x00000002288df438 in -[SKSoundSource dealloc] ()
#5  0x00000002288b13d8 in -[SKPlaySound .cxx_destruct] ()
#6  0x00000002101bc468 in object_cxxDestructFromClass(objc_object*, objc_class*) ()
#7  0x00000002101cc70c in objc_destructInstance ()
#8  0x00000002101cc774 in object_dispose ()
#9  0x000000022880fe18 in -[SKAction dealloc] ()
#10 0x00000001046de4a4 in @objc GameScene.__ivar_destroyer ()
#11 0x00000002101bc468 in object_cxxDestructFromClass(objc_object*, objc_class*) ()
#12 0x00000002101cc70c in objc_destructInstance ()
#13 0x00000002101cc774 in object_dispose ()
#14 0x000000023e1e56cc in -[UIResponder dealloc] ()
#15 0x00000002288911e8 in -[SKNode dealloc] ()
#16 0x0000000228845c5c in -[SKScene dealloc] ()
#17 0x00000001046de400 in GameScene.__deallocating_deinit at /Users/
#18 0x00000001046de438 in @objc GameScene.__deallocating_deinit ()
#19 0x00000001047212ec in NextGameBar.touchesEnded(_:with:) at /Users/
#20 0x0000000104721390 in @objc NextGameBar.touchesEnded(_:with:) ()
#21 0x000000022886c1b0 in -[SKView touchesEnded:withEvent:] ()
#22 0x000000023e1f418c in -[UIWindow _sendTouchesForEvent:] ()
#23 0x000000023e1f53f0 in -[UIWindow sendEvent:] ()
#24 0x000000023e1d46ec in -[UIApplication sendEvent:] ()
#25 0x000000023e2a057c in __dispatchPreprocessedEventFromEventQueue ()
#26 0x000000023e2a2f74 in __handleEventQueueInternal ()
#27 0x000000023e29ba64 in __handleHIDEventFetcherDrain ()
#28 0x0000000210f7c1cc in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ ()
#29 0x0000000210f7c14c in __CFRunLoopDoSource0 ()
#30 0x0000000210f7ba30 in __CFRunLoopDoSources0 ()
#31 0x0000000210f768fc in __CFRunLoopRun ()
#32 0x0000000210f761cc in CFRunLoopRunSpecific ()
#33 0x00000002131ed584 in GSEventRunModal ()
#34 0x000000023e1b9054 in UIApplicationMain ()
#35 0x00000001047111e0 in main at /Users/
#36 0x0000000210a36bb4 in start ()

Большое спасибо за помощь.

...