Это невозможно узнать, не увидев больше кода, но я иногда обнаруживал, что «странные» ошибки EXC_BAD_ACCESS
могут возникать из-за того, что какой-то фрагмент кода записывает в память, чего не должно быть. Например, это вызвало у меня несколько часов головной боли:
NSLog(@"Error code: %i", [dict objectForKey:@"key"]);
Нет, компилятор не предупредил меня. Dict возвращал объект NSString, но ему было дано только место для записи в целое число. Так что это «закончилось» написанием какого-то другого объекта. Ошибки казались случайными, но если бы я выполнял определенные шаги точно, я мог бы их воспроизвести. Тьфу, я ненавидел отслеживать это до 20 тысяч строк кода.
Итак, проверьте что-то подобное в вашем коде. Вы создаете какой-либо низкоуровневый объект c (например, массив c)? Используете ли вы какое-либо ядро «заполнить пустым» (например: Core-Graphics, core-text, core-animation)? Иногда они используют объекты / методы более низкого уровня c, и если вы не используете их правильно, вы можете писать в память другого объекта.
Наконец, дважды проверьте все форматы NSString (как в NSLog, указанном выше). Убедитесь, что все ваши заполнители соответствуют объектам / примитивам, возвращенным им.
Может быть, еще кое-что нужно проверить, но это все, о чем я могу думать в данный момент.