我有3个viewController A,B,C。 从A i到推送segue到B并且从B推送segue到C.没有问题向前并且没有设置控制器C作为UINavigationControllerDelegate我也可以从C-> B和B-> A向后返回。如果在C i的viewDidLoad中设置:
self.navigationController.delegate = self;
因为我需要方法navigationController:willShowViewController 我仍然可以从A-> B-> C和C-> B调用我需要的方法但是如果我按下B-后面的按钮>我的应用程序崩溃说BAD_ACCESS.How我可以避免这个?提前致谢
libobjc.A.dylib`objc_msgSend:
0x14e00a4: movl 8(%esp), %ecx
0x14e00a8: movl 4(%esp), %eax
0x14e00ac: testl %eax, %eax
0x14e00ae: je 0x14e0110 ; objc_msgSend + 108
0x14e00b0: movl (%eax), %edx
0x14e00b2: movzwl 12(%edx), %eax Thread 1:EXC_BAD_ACCESS(code=1,address0x408e3b7c)
0x14e00b6: andl %ecx, %eax
0x14e00b8: shll $3, %eax
0x14e00bb: addl 8(%edx), %eax
0x14e00be: cmpl (%eax), %ecx
0x14e00c0: jne 0x14e00c5 ; objc_msgSend + 33
0x14e00c2: jmpl *4(%eax)
0x14e00c5: cmpl $0, (%eax)
0x14e00c8: je 0x14e0119 ; objc_msgSend + 117
0x14e00ca: cmpl 8(%edx), %eax
0x14e00cd: je 0x14e00d9 ; objc_msgSend + 53
0x14e00cf: subl $8, %eax
0x14e00d2: cmpl (%eax), %ecx
0x14e00d4: jne 0x14e00c5 ; objc_msgSend + 33
0x14e00d6: jmpl *4(%eax)
0x14e00d9: movzwl 12(%edx), %eax
0x14e00dd: shll $3, %eax
0x14e00e0: addl 8(%edx), %eax
0x14e00e3: jmp 0x14e00f2 ; objc_msgSend + 78
0x14e00e5: cmpl $0, (%eax)
0x14e00e8: je 0x14e0119 ; objc_msgSend + 117
0x14e00ea: cmpl 8(%edx), %eax
0x14e00ed: je 0x14e00f9 ; objc_msgSend + 85
0x14e00ef: subl $8, %eax
0x14e00f2: cmpl (%eax), %ecx
0x14e00f4: jne 0x14e00e5 ; objc_msgSend + 65
0x14e00f6: jmpl *4(%eax)
0x14e00f9: pushl %ebp
0x14e00fa: movl %esp, %ebp
0x14e00fc: pushl $0
0x14e00fe: pushl $0
0x14e0100: pushl $0
0x14e0102: pushl %edx
0x14e0103: pushl %ecx
0x14e0104: movl 8(%ebp), %ecx
0x14e0107: pushl %ecx
0x14e0108: calll 0x14ce720 ; objc_msgSend_corrupt_cache_error
0x14e010d: nopl (%eax)
0x14e0110: xorl %edx, %edx
0x14e0112: xorps %xmm0, %xmm0
0x14e0115: xorps %xmm1, %xmm1
0x14e0118: ret
0x14e0119: movl 8(%esp), %ecx
0x14e011d: movl 4(%esp), %eax
0x14e0121: pushl %ebp
0x14e0122: movl %esp, %ebp
0x14e0124: subl $12, %esp
0x14e0127: pushl %edx
0x14e0128: pushl %ecx
0x14e0129: pushl %eax
0x14e012a: calll 0x14d8017 ; _class_lookupMethodAndLoadCache3
0x14e012f: leave
0x14e0130: cmpl %eax, %eax
0x14e0132: jmpl *%eax
答案 0 :(得分:0)
UINavigationController
的{{3}}属性不保留该值,因此如果您使用ARC进行内存管理(默认),则可能会释放C,导致委托为垃圾(这些天是BAD_ACCESS错误的常见原因)。解决方案是简单地对C进行一些强有力的参考。