[UICollectionViewLayout dealloc]中奇怪的EXC_BAD_ACCESS

时间:2013-09-15 16:58:23

标签: ios exc-bad-access uicollectionviewlayout

我将包含UICollectionView的视图控制器推送到导航控制器上。当我弹出它以返回到前一个VC时,我得到一个EXC_BAD_ACCESS代码= 2。我启用了NSZombies,它在我的UICollectionViewLayout子类的dealloc方法的末尾(带有“}”的行)停止。这是堆栈跟踪:

* thread #1: tid = 0x70505, 0x030620b0 libobjc.A.dylib`objc_msgSend + 12, queue =     'com.apple.main-thread, stop reason = EXC_BAD_ACCESS (code=2, address=0x2)
frame #0: 0x030620b0 libobjc.A.dylib`objc_msgSend + 12
frame #1: 0x00f6812e UIKit`-[UICollectionViewLayout dealloc] + 226
frame #2: 0x000526ce MyDog`-[UICollectionViewWaterfallLayout dealloc](self=0x1da8e010, _cmd=0x03068678) + 206 at UICollectionViewWaterfallLayout.m:69
frame #3: 0x03063692 libobjc.A.dylib`objc_object::sidetable_release(bool) + 268
frame #4: 0x03064adf libobjc.A.dylib`-[NSObject release] + 25
frame #5: 0x00f87f50 UIKit`-[UICollectionViewData dealloc] + 45
frame #6: 0x03063692 libobjc.A.dylib`objc_object::sidetable_release(bool) + 268
frame #7: 0x03064adf libobjc.A.dylib`-[NSObject release] + 25
frame #8: 0x00f4a773 UIKit`-[UICollectionView dealloc] + 260
frame #9: 0x0098dd34 UIKit`-[UIView release] + 89
frame #10: 0x03062e97 libobjc.A.dylib`objc_release + 71
frame #11: 0x03062e3e libobjc.A.dylib`objc_storeStrong + 39
frame #12: 0x00040160 MyDog`-[MDProfileViewController dealloc](self=0x0dd1dd00, _cmd=0x03068678) + 96 at MDProfileViewController.m:83
frame #13: 0x00a4d275 UIKit`-[UIViewController release] + 89
frame #14: 0x03062e97 libobjc.A.dylib`objc_release + 71
frame #15: 0x009347bc UIKit`__destroy_helper_block_121 + 124
frame #16: 0x06d5e7a5 libsystem_sim_blocks.dylib`_Block_release + 207
frame #17: 0x009a1a4f UIKit`-[UIViewAnimationBlockDelegate dealloc] + 66
frame #18: 0x03063692 libobjc.A.dylib`objc_object::sidetable_release(bool) + 268
frame #19: 0x03064adf libobjc.A.dylib`-[NSObject release] + 25
frame #20: 0x039aede0 CoreFoundation`CFRelease + 272
frame #21: 0x03ab67ce CoreFoundation`-[__NSDictionaryI dealloc] + 126
frame #22: 0x03063692 libobjc.A.dylib`objc_object::sidetable_release(bool) + 268
frame #23: 0x03062e81 libobjc.A.dylib`objc_release + 49
frame #24: 0x03063ce7 libobjc.A.dylib`(anonymous namespace)::AutoreleasePoolPage::pop(void*) + 537
frame #25: 0x039cea98 CoreFoundation`_CFAutoreleasePoolPop + 24
frame #26: 0x039d37f3 CoreFoundation`__CFRunLoopRun + 1971
frame #27: 0x039d2bf3 CoreFoundation`CFRunLoopRunSpecific + 467
frame #28: 0x039d2a0b CoreFoundation`CFRunLoopRunInMode + 123
frame #29: 0x03c87a27 GraphicsServices`GSEventRunModal + 192
frame #30: 0x03c8784e GraphicsServices`GSEventRun + 104
frame #31: 0x0093ff0b UIKit`UIApplicationMain + 1225
frame #32: 0x0001eecd MyDog`main(argc=1, argv=0xbfffeeb0) + 141 at main.m:11

当EXC_BAD_ACCESS不是由我的代码直接引起时,我不知道如何调试它。有没有人有这样的问题?感谢

更新: 我也试过了“Zombies”仪器的预设,但它刚刚停止而没有给我任何信息。

2 个答案:

答案 0 :(得分:1)

刚遇到同样的问题。弹出导航控制器后,您的UICollectionView仍在查询。将以下内容添加到包含UICollectionView

的控制器类中
- (void)dealloc
{
    _collectionView.dataSource = nil;
    _collectionView.delegate = nil;
    _collectionView = nil;
}

答案 1 :(得分:0)

尝试在dealloc方法中设置.collectionViewLayout = nil