objc msgSend [NSArrayM dealloc] отчет о сбоях иногда из Crashlytics
Я недавно получил это приложение после обновления приложений 3.0 Не уверен, идет ли это из моего кода или что-то еще. Отчет о крушении не отслеживается
Here is the crash report
Crashed: com.apple.main-thread EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x000000009a0dbeb8
0 libobjc.A.dylib objc_msgSend + 16 release
1 CoreFoundation CFRelease + 524
2 CoreFoundation -[__NSArrayM dealloc] + 152
3 libobjc.A.dylib (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 564
4 CoreFoundation _CFAutoreleasePoolPop + 28
5 Foundation -[NSAutoreleasePool release] + 148
6 UIKit -[UIApplication _run] + 588
7 UIKit UIApplicationMain + 1488
8 MyAppName main.m line 32main
9 libdyld.dylib start + 4
5 ответов
оказывается, ошибка работы фрейма
вот что я получил от поддержки приложений
Это должно быть все настроено, если вы обновите до 3.0.10 Crashlytics SDK - в 3.0.9 было редкое состояние гонки, которое мы исправили с последней версией. Откройте ткань.app, обновить структуру, и вы будете хорошо идти:)
команда поддержки Crashlytics потрясающая!
подтверждено, что это было введено в мое приложение Crashlytics 3.0.9 выпущено 10 июня 2015 года в соответствии с https://dev.twitter.com/fabric/overview/changelog.
обновлено до Crashlytics 3.0.10 и прошло экстренное обновление в субботу. Результаты говорят сами за себя:
пошел от 99.9% Crash Free в понедельник, выпустил обновление во вторник и к пятнице 26 июня безаварийная ставка упала до 98,3% , который был более 16 кратное увеличение пользователей, испытывающих сбой. В субботу 27 июня я смог заставить Apple выполнить ускоренный обзор приложений, и новая версия с Crashlytics 3.0.10 была выпущена в App Store в субботу. Как вы можете видеть, безаварийная скорость теперь возвращается к 99% через пару дней после выпуска, возвращаясь к 99.9%.
Я надеюсь, что это поможет тем из вас, кто вытаскивает волосы из-за аварии, которая была введена non, кроме вашей структуры аварии. Хотя бы они решено быстро, и новая версия, похоже, полностью решит проблему.
CoreFoundation _CFAutoreleasePoolPop + 28
Autorelease пул сливают, вероятно, в конце цикла пользовательского интерфейса. Это означает, что все объекты autoreleased в бассейн теперь освобождены.
CoreFoundation -[__NSArrayM dealloc] + 152
выпускается изменяемый массив. Это означает, что все предметы, которые он держит, также освобождаются.
CoreFoundation CFRelease + 524
освобождается один из элементов массива.
сбой, элемент недействителен,он уже был освобожден.
вещь вы должны проверить детали внутри матрицы. Что-то определенно overreleased. Если вы используете ручной подсчет ссылок, вы должны проверить объекты, которые вы помещаете в массивы - один из элементов освобожден, но все еще хранится в некотором массиве.
код, который вызовет аналогичную ошибку в MRC, следующий:
NSMutableArray *array = [NSMutableArray array]; //an autoreleased array
NSObject *object1 = [[NSObject alloc] init];
NSObject *object2 = [[NSObject alloc] init];
[array addObject:object1]
[array addObject:object2]
[object1 release];
[object2 release];
//let's overrelease
[object1 release];
//when array is released, it will send a release message to object1, too
Кажется, что ваш NSArray выпущен , и вы хотите получить к нему доступ, чтобы произошел этот сбой. вы можете определить свой NSArray как сильный в вашей модели или VC
@property(nonatomic, strong) NSArray *myArray
Если вы не можете угадать, какой NSArraY был выпущен , я рекомендую вам отладить приложение с помощью объекта NSZombie в инструменте, чтобы найти точный NSArray
Это случилось со мной много раз. просто добавьте сильную ссылку для каждого NSArray
в коде. и тогда вы никогда не увидите ошибки, как вы видели.
лучше использовать приведенный ниже код:
@property(strong) NSArray *myArray.