代码之家  ›  专栏  ›  技术社区  ›  esqew

使用uialertview时出现奇怪的sigabrt(无法识别的选择器发送到实例)

  •  0
  • esqew  · 技术社区  · 14 年前

    在过去的半个小时里,我一直在用这个工具猛击我的头,所以我想我应该从StackOverflow向我的朋友们寻求一些智慧。

    我有一个选项卡应用程序,在根目录下有一个视图控制器,并将视图传递给其他人。 xib S.I创建了一个自定义XIB并添加了它的视图控制器类( MoreViewController )作为 External Object 在接口生成器中。当我链接我的方法时,我得到一个 SIGABRT 使用调用方法时出错 UIButton :

    方法

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

    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)
    

    有人能解释一下吗?

    事先谢谢!


    编辑 好吧,我已经启用了nszombie…我得到一个不那么神秘的错误!哇哦!

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

    编辑2 使用Instruments的僵尸模式,我成功地发现了内存地址的内容,如下所示:

    #   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:]
    

    我确实注意到了 -[NSAutoreleasePool release] 以前调用过 -[UIApplication sendAction:to:from:forEvent:] …那是我的问题吗?我如何解决这个问题?

    再次感谢你的回答,每个人都会帮助你。


    编辑4

    输出来自 info malloc 命令 :

    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
    

    编辑5

    我还没弄明白…有人能帮忙吗?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Jerry Jones    14 年前

    您之所以收到此消息,是因为要发送的对象showAbout:to不响应该选择器。要么你指向了错误的目标,要么你的目标的指针被更改了。

    很难说没有看到更多的代码。如果您是在ib中创建按钮,可能没有正确连接插座。

    编辑:根据新代码,您的moveViewController对象似乎没有正确保留。要获取有关您指定的实例的信息,可以像打开nszombieEnabled一样打开mallocstackloggingnocompact。当你得到错误时,你可以使用

    malloc_历史实例\u地址

    信息malloc实例地址

    这是一篇非常适合这种调试的文章

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

        2
  •  0
  •   esqew    14 年前

    我没有找出原因,但是通过将视图移动到一个视图中解决了错误。 XIB .

    无论如何,谢谢。