一些随机崩溃EXC_BAD_ACCESS

时间:2011-11-03 23:26:36

标签: objective-c ios5

我正在接受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

4 个答案:

答案 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中使用正确的笔尖名称调用视图控制器。