Подумайте, что это говорит вам:
Terminating app due to uncaught exception 'NSRangeException', reason:
'-[_NSInlineData getBytes:range:]: range {1, 2} exceeds data length 2'
Ваш объект данных имеет длину 2 байта. Первый байт в позиции 0 (в соответствии с вашим кодом) является значением success
. Это оставляет еще один байт в позиции 1 для обработки. Но ваш код - это попытка скопировать из него 2 байта - это range {1, 2}
в сообщении; диапазон начинается с позиции 1 и имеет длину 2. Вы читаете после конца данных.
Вы должны убедиться, что в данных достаточно данных, чтобы удовлетворить вызов -getBytes:...
, который вы пытаетесь сделать. Вам также может потребоваться исправить ваши предположения о том, насколько большим должно быть значение режима отмены в буфере, потому что оно явно меньше, чем вы ожидаете. Ваш код предполагает, что это uint16_t
(2 байта), но в данных остался только один байт.