Weird SIGABRT (unrecognized selector sent to instance) when using UIAlertView

倖福魔咒の 提交于 2019-12-22 01:34:27

问题


I've been bashing my head in with this one for the past half hour, so I thought I'd ask my friends from Stack Overflow for some wisdom.

I've got a tab bar application with a view controller at the root, and passing off the views to other xibs. I created a custom XIB and added its view controller class (MoreViewController) as an External Object in Interface Builder. When I link my methods, I get a SIGABRT error when calling the method with a UIButton:

Method

- (IBAction)showAbout {
    alert = [[[UIAlertView alloc] initWithTitle:@"About" message:@"yadda yadda yadda some message" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil] autorelease];
    [alert show];
}

Stack

2010-09-17 18:01:40.714 <appname>[7963:207] -[__NSCFType showAbout]: unrecognized selector sent to instance 0x5f6ef10
2010-09-17 18:01:40.716 <appname>[7963:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType showAbout]: unrecognized selector sent to instance 0x5f6ef10'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x0247eb99 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x025ce40e objc_exception_throw + 47
    2   CoreFoundation                      0x024806ab -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x023f02b6 ___forwarding___ + 966
    4   CoreFoundation                      0x023efe72 _CF_forwarding_prep_0 + 50
    5   UIKit                               0x002b07f8 -[UIApplication sendAction:to:from:forEvent:] + 119
    6   UIKit                               0x0033bde0 -[UIControl sendAction:to:forEvent:] + 67
    7   UIKit                               0x0033e262 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
    8   UIKit                               0x0033ce0f -[UIControl touchesEnded:withEvent:] + 458
    9   UIKit                               0x002d43d0 -[UIWindow _sendTouchesForEvent:] + 567
    10  UIKit                               0x002b5cb4 -[UIApplication sendEvent:] + 447
    11  UIKit                               0x002ba9bf _UIApplicationHandleEvent + 7672
    12  GraphicsServices                    0x02d5e822 PurpleEventCallback + 1550
    13  CoreFoundation                      0x0245fff4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    14  CoreFoundation                      0x023c0807 __CFRunLoopDoSource1 + 215
    15  CoreFoundation                      0x023bda93 __CFRunLoopRun + 979
    16  CoreFoundation                      0x023bd350 CFRunLoopRunSpecific + 208
    17  CoreFoundation                      0x023bd271 CFRunLoopRunInMode + 97
    18  GraphicsServices                    0x02d5d00c GSEventRunModal + 217
    19  GraphicsServices                    0x02d5d0d1 GSEventRun + 115
    20  UIKit                               0x002beaf2 UIApplicationMain + 1160
    21  <appname>                           0x00001b30 main + 102
    22  <appname>                           0x00001ac1 start + 53
)
terminate called after throwing an instance of 'NSException'
Program received signal:  “SIGABRT”.
[Switching to process 7963]
(gdb)

Can someone shed some light on this?

Thanks in advance!


EDIT Ok, I've enabled NSZombie and... I get a less cryptic error! Woohoo!

2010-09-17 18:48:56.576 <appname>[8088:207] *** -[MoreViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x5fa98e0

EDIT 2 With Instruments' Zombie Mode, I've managed to uncover the contents of the memory address, listed below:

#   Category    Event Type  RefCt   Timestamp   Address Size    Responsible Library Responsible Caller
0   MoreViewController  Malloc  1   2968170752  0x5fa5ee0   144 UIKit   -[UIClassSwapper initWithCoder:]
1   MoreViewController  Retain  2   2968226816  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
2   MoreViewController  Retain  3   2968229888  0x5fa5ee0   0   Foundation  -[NSKeyedUnarchiver _replaceObject:withObject:]
3   MoreViewController  Release 2   2968232704  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
4   MoreViewController  Retain  3   2968236800  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
5   MoreViewController  Autorelease     2968259840  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
6   MoreViewController  Retain  4   2968262912  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
7   MoreViewController  Retain  5   2968322816  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
8   MoreViewController  Autorelease     2968324864  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
9   MoreViewController  Retain  6   2968331776  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
10  MoreViewController  Retain  7   2986161920  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
11  MoreViewController  Autorelease     2986163712  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
12  MoreViewController  Retain  8   2986166784  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
13  MoreViewController  Retain  9   2986367744  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
14  MoreViewController  Autorelease     2986369792  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
15  MoreViewController  Retain  10  2986371840  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection initWithCoder:]
16  MoreViewController  Release 9   2986498816  0x5fa5ee0   0   UIKit   -[UINib instantiateWithOwner:options:]
17  MoreViewController  Release 8   2986510848  0x5fa5ee0   0   UIKit   -[UINib instantiateWithOwner:options:]
18  MoreViewController  Release 7   2986524928  0x5fa5ee0   0   UIKit   -[UINib instantiateWithOwner:options:]
19  MoreViewController  Release 6   2986529792  0x5fa5ee0   0   UIKit   -[UINib instantiateWithOwner:options:]
20  MoreViewController  Retain  7   2986635008  0x5fa5ee0   0   Foundation  -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]
21  MoreViewController  Retain  8   2986648832  0x5fa5ee0   0   Foundation  -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]
22  MoreViewController  Release 7   2986650880  0x5fa5ee0   0   Foundation  -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]
23  MoreViewController  Retain  8   2986679040  0x5fa5ee0   0   Foundation  -[NSArray(NSArray) initWithCoder:]
24  MoreViewController  Release 7   2986705920  0x5fa5ee0   0   UIKit   -[UINib instantiateWithOwner:options:]
25  MoreViewController  Retain  8   2986823936  0x5fa5ee0   0   Foundation  -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]
26  MoreViewController  Retain  9   2986860800  0x5fa5ee0   0   Foundation  -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]
27  MoreViewController  Release 8   2986900736  0x5fa5ee0   0   Foundation  -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]
28  MoreViewController  Retain  9   2986923776  0x5fa5ee0   0   Foundation  -[NSArray(NSArray) initWithCoder:]
29  MoreViewController  Release 8   2986969856  0x5fa5ee0   0   UIKit   -[UINib instantiateWithOwner:options:]
30  MoreViewController  Retain  9   2987261952  0x5fa5ee0   0   UIKit   -[UINib instantiateWithOwner:options:]
31  MoreViewController  Release 8   2987425792  0x5fa5ee0   0   Foundation  -[NSKeyedUnarchiver dealloc]
32  MoreViewController  Release 7   2987520000  0x5fa5ee0   0   Foundation  -[NSKeyedUnarchiver dealloc]
33  MoreViewController  Release 6   2987686656  0x5fa5ee0   0   Foundation  -[NSKeyedUnarchiver dealloc]
34  MoreViewController  Release 5   2987698944  0x5fa5ee0   0   Foundation  -[NSKeyedUnarchiver dealloc]
35  MoreViewController  Release 4   2987756032  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection dealloc]
36  MoreViewController  Release 3   2987793920  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection dealloc]
37  MoreViewController  Release 2   2987811840  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection dealloc]
38  MoreViewController  Release 1   2987849984  0x5fa5ee0   0   UIKit   -[UIRuntimeConnection dealloc]
39  MoreViewController  Release 0   2994390016  0x5fa5ee0   0   Foundation  -[NSAutoreleasePool release]
40  MoreViewController  Zombie  -1  6312182784  0x5fa5ee0   0   UIKit   -[UIApplication sendAction:to:from:forEvent:]

I did notice that -[NSAutoreleasePool release] is called before -[UIApplication sendAction:to:from:forEvent:]... could that be my problem? How would I resolve that?

Thanks again for your responses, every one helps.


EDIT 4

Output from info malloc command:

2010-09-17 19:41:57.305 <appname>[8440:207] *** -[MoreViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x63ae170
[Switching to process 8440]
(gdb) info malloc 0x63ae170
Alloc: Block address: 0x063ae170 length: 132
Stack - pthread: 0xa0541500 number of frames: 49
    0: 0x947170c3 in malloc_zone_calloc
    1: 0x9471701a in calloc
    2: 0x25cdb5b in _internal_class_createInstanceFromZone
    3: 0x25d07a6 in class_createInstance
    4: 0x23a3108 in +[NSObject(NSObject) allocWithZone:]
    5: 0x23a2f0a in +[NSObject(NSObject) alloc]
    6: 0x4a6039 in -[UIClassSwapper initWithCoder:]
    7: 0x1669c in _decodeObjectBinary
    8: 0x15809 in _decodeObject
    9: 0x4a5d77 in -[UIRuntimeConnection initWithCoder:]
   10: 0x4a62e5 in -[UIRuntimeEventConnection initWithCoder:]
   11: 0x1669c in _decodeObjectBinary
   12: 0x1746d in -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]
   13: 0x17a9c in -[NSArray(NSArray) initWithCoder:]
   14: 0x1669c in _decodeObjectBinary
   15: 0x15809 in _decodeObject
   16: 0x4a5034 in -[UINib instantiateWithOwner:options:]
   17: 0x4a6eb5 in -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:]
   18: 0x35c95f in -[UIViewController _loadViewFromNibNamed:bundle:]
   19: 0x35a675 in -[UIViewController loadView]
   20: 0x35a54f in -[UIViewController view]
   21: 0x36c73e in -[UITabBarController transitionFromViewController:toViewController:transition:shouldSetSelected:]
   22: 0x36b2b2 in -[UITabBarController transitionFromViewController:toViewController:]
   23: 0x36d08c in -[UITabBarController _setSelectedViewController:]
   24: 0x36cefb in -[UITabBarController _tabBarItemClicked:]
   25: 0x2b07f8 in -[UIApplication sendAction:to:from:forEvent:]
   26: 0x4ad2d0 in -[UITabBar _sendAction:withEvent:]
   27: 0x2b07f8 in -[UIApplication sendAction:to:from:forEvent:]
   28: 0x33bde0 in -[UIControl sendAction:to:forEvent:]
   29: 0x33e262 in -[UIControl(Internal) _sendActionsForEvents:withEvent:]
   30: 0x33bd97 in -[UIControl sendActionsForControlEvents:]
   31: 0x2b07f8 in -[UIApplication sendAction:to:from:forEvent:]
   32: 0x33bde0 in -[UIControl sendAction:to:forEvent:]
   33: 0x33e262 in -[UIControl(Internal) _sendActionsForEvents:withEvent:]
   34: 0x33ce0f in -[UIControl touchesEnded:withEvent:]
   35: 0x2d43d0 in -[UIWindow _sendTouchesForEvent:]
   36: 0x2b5cb4 in -[UIApplication sendEvent:]
   37: 0x2ba9bf in _UIApplicationHandleEvent
   38: 0x2d5e822 in PurpleEventCallback
   39: 0x245fff4 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__
   40: 0x23c0807 in __CFRunLoopDoSource1
   41: 0x23bda93 in __CFRunLoopRun
   42: 0x23bd350 in CFRunLoopRunSpecific
   43: 0x23bd271 in CFRunLoopRunInMode
   44: 0x2d5d00c in GSEventRunModal
   45: 0x2d5d0d1 in GSEventRun
   46: 0x2beaf2 in UIApplicationMain
   47: 0x1a78 in main at /Users/Sean/Desktop/<appname>/main.m:13
   48: 0x1a09 in start

EDIT 5

I still haven't figured this out... can ANYONE help?


回答1:


You are getting this because the object you are sending showAbout: to doesn't respond to that selector. Either you are pointing the the wrong target, or your target's pointer is being changed.

It's tough to say without seeing a little more code. If you are creating the button in IB, you probably don't have your outlets hooked up properly.

Edit: Based on your new code, it looks like your MoveViewController object isn't being retained properly. To get info about the instance you specificed, you can turn on MallocStackLoggingNoCompact the same way you turned on NSZombieEnabled. When you get your error, you can use either

malloc_history INSTANCE_ADDRESS

or

info malloc INSTANCE_ADDRESS

This is a great article for this kind of debugging

http://www.friday.com/bbum/2010/01/10/using-malloc-to-debug-memory-misuse-in-cocoa/




回答2:


I didn't figure out the cause, but the errors were resolved by moving the views into one XIB.

Thanks anyway.



来源:https://stackoverflow.com/questions/3739405/weird-sigabrt-unrecognized-selector-sent-to-instance-when-using-uialertview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!