Случайный сбой EXC_BAD_ACCESS - PullRequest
1 голос
/ 04 ноября 2011

Я получаю EXC_BAD_ACCESS, но я больше не знаю, что делать.
Я получаю ошибку, когда пытаюсь переключать вкладки (UITabBar).Ничто не выполняется в соответствии с NSLog.

Событие вкладки на панели вкладок - это переход, в котором мой код не выполняется ...
(дуга включена)

edit:
Когда я включаю зомби, я получаю *** -[TDAppDelegate respondsToSelector:]: message sent to deallocated instance 0x6e8a260

Я могу нажать rightBarButtonItem, модальное представление представлено и просто работает (оно также связывается с appdelegate).Когда модальное представление закрывается, и я пытаюсь переключать вкладки, приложение снова падает.[UITabBarDelegate tabBar: didSelectItem:] вызывается.

стек:

(gdb) info malloc-history 0x6e8a260
Alloc: Block address: 0x06e8a260 length: 44
Stack - pthread: 0xac4932c0 number of frames: 32
    0: 0x9428c90b in malloc_zone_calloc
    1: 0x9428d837 in calloc
    2: 0x1bc1c93 in class_createInstance
    3: 0x1bcc88b in _objc_rootAllocWithZone
    4: 0x17de661 in +[NSObject allocWithZone:]
    5: 0x1bcc8b9 in _objc_rootAlloc
    6: 0x66f2d6 in -[UIClassSwapper initWithCoder:]
    7: 0x76dfa2 in UINibDecoderDecodeObjectForValue
    8: 0x76d6b7 in -[UINibDecoder decodeObjectForKey:]
    9: 0x66eead in -[UIRuntimeConnection initWithCoder:]
   10: 0x76dfa2 in UINibDecoderDecodeObjectForValue
   11: 0x76d9af in UINibDecoderDecodeObjectForValue
   12: 0x76d6b7 in -[UINibDecoder decodeObjectForKey:]
   13: 0x66e305 in -[UINib instantiateWithOwner:options:]
   14: 0x87484f in -[UIStoryboard instantiateViewControllerWithIdentifier:]
   15: 0x87499e in -[UIStoryboard instantiateInitialViewController]
   16: 0x4501e3 in -[UIApplication _loadMainStoryboardFileNamed:bundle:]
   17: 0x450461 in -[UIApplication _loadMainInterfaceFile]
   18: 0x44f7c0 in -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:]
   19: 0x45e743 in -[UIApplication handleEvent:withNewEvent:]
   20: 0x45f1f8 in -[UIApplication sendEvent:]
   21: 0x452aa9 in _UIApplicationHandleEvent
   22: 0x1feafa9 in PurpleEventCallback
   23: 0x17b01c5 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__
   24: 0x1715022 in __CFRunLoopDoSource1
   25: 0x171390a in __CFRunLoopRun
   26: 0x1712db4 in CFRunLoopRunSpecific
   27: 0x1712ccb in CFRunLoopRunInMode
   28: 0x44f2a7 in -[UIApplication _run]
   29: 0x450a9b in UIApplicationMain
   30: 0x2a18 in main at /Users/user/Desktop/app/main.m:16
   31: 0x2975 in start

Ответы [ 4 ]

2 голосов
/ 13 ноября 2011

Как предчувствие, вы терпите крах, потому что у вас недостаточно памяти.Один из релевантных представлений или контроллеров представлений удерживается, потому что на него ссылаются в ARC как strong, когда weak будет более подходящим.

Также посмотрите в вашем коде экземпляры respondsToSelector:.Это может быть не тот делегат, который пытается обмениваться сообщениями в этом случае.Это красная сельдь.По моему опыту, эти журналы консоли «отправлено в освобожденный экземпляр» редко сообщают вам фактический объект, о котором сообщалось.

0 голосов
/ 07 ноября 2011

Идея 1
Убедитесь, что ваша вкладка связана или сохранена.Кажется, в какой-то момент он был освобожден.Когда модальное представление отклонено, задайте некоторые точки beakpoints, чтобы убедиться, что ссылка все еще действительна.

Идея 2
Нет ли у вас какого-либо свойства (копии) или переменной, которые выпытаетесь [скопировать], не внедрив и не объявив протокол NSCopying в самом объекте?Если да, разве у вас нет проблем с самой реализацией?

Идея 3
Отключите ARC и проверьте, сохраняется ли проблема (если вы не используете огромныйпамяти в вашем приложении, конечно, из-за утечек памяти, которые будут генерироваться).

0 голосов
/ 13 ноября 2011

В случае сбоя

12: 0x76d6b7 in - [UINibDecoder decodeObjectForKey:] 13: 0x66e305 in - [UINib instantiateWithOwner: options:]

Показывает, что файл nib не являетсяправильно привязан к представлению какой-либо конкретной вкладки.

Пожалуйста, проверьте, если в AppDelegate вы делаете вызов контроллеру представления с правильным именем пера, прежде чем добавлять на панель вкладок.

0 голосов
/ 04 ноября 2011

Проверьте ваш -(void)dealloc метод. Я получал то же самое, и в моем методе dealloc я сначала вызывал [super dealloc], прежде чем выпускать все остальные. Правильный путь

-(void)dealloc
{
      // Right way
      [myObj release];
      [super dealloc];
}

У меня так было, и оно падало каждый раз, когда я отказывался от своего взгляда.

-(void)dealloc
{
      // Wrong way
      [super dealloc];
      [myObj release];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...