我正在接受EXC_BAD_ACCESS,但我不知道该怎么做 我尝试切换标签(UITabBar)时收到错误。根据NSLog没有执行任何操作。
tabbar tab事件是一个segue,其中没有我的代码被执行...
(已启用弧)
编辑:
当我启用僵尸时,我得到*** -[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
答案 0 :(得分:2)
由于你没有足够的内存,所以你正在崩溃。正在举行其中一个相关视图或视图控制器,因为当strong
更合适时,它在ARC下被引用为weak
。
还要查看代码中respondsToSelector:
的实例。它可能不是尝试在此实例中发送消息的委托。这是一个红鲱鱼。我的经验是那些“发送到解除分配的实例”控制台日志很少告诉你实际发送消息的对象。
答案 1 :(得分:0)
检查您的-(void)dealloc
方法。
我得到了同样的东西,在我的dealloc方法中,我先释放[super dealloc]
,然后释放其他所有内容。
正确的方式
-(void)dealloc
{
// Right way
[myObj release];
[super dealloc];
}
我有这样的方式,每当我解除我的观点时它都会崩溃。
-(void)dealloc
{
// Wrong way
[super dealloc];
[myObj release];
}
答案 2 :(得分:0)
创意1
检查您的tabBar是否已链接/保留。它似乎在某个时候被解除分配。当模态视图被解除时,放置一些beakpoints以检查引用是否仍然有效。
创意2
在没有在对象本身中实现和声明NSCopying协议的情况下,您是否有任何您正在尝试[复制]的属性(副本)或变量?如果是,那么您是否在实施过程中遇到了一些问题?
创意3
取消激活ARC并测试问题是否仍然存在(如果你的应用中没有使用大量内存,当然是因为会产生内存泄漏)。
答案 3 :(得分:0)
根据崩溃,
12:0x76d6b7 in - [UINibDecoder decodeObjectForKey:] 13:0x66e305 in - [UINib instantiateWithOwner:options:]
它显示,nib文件没有正确绑定某个特定选项卡的视图。
在添加到标签栏之前,请检查是否在AppDelegate中使用正确的笔尖名称调用视图控制器。