Странный SIGABRT (нераспознанный селектор, отправленный экземпляру) при использовании UIAlertView - PullRequest
0 голосов
/ 18 сентября 2010

Последние полчаса я ломал голову над этим, поэтому подумал, что попрошу у моих друзей из Stack Overflow мудрости.

У меня естьПриложение панели вкладок с контроллером представления в корне и передачей представлений другим xib s.Я создал пользовательский 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];
}

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)

Может кто-нибудь пролить свет на это?

Заранее спасибо!


РЕДАКТИРОВАТЬ Хорошо, я включил NSZombie и ... Я получаю менее загадочную ошибку!Woohoo!

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

РЕДАКТИРОВАТЬ 2 В режиме «Зомби инструментов» мне удалось раскрыть содержимое адреса памяти, указанного ниже:

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

3 голосов
/ 18 сентября 2010

Вы получаете это, потому что объект, который вы посылаете showAbout: to, не отвечает на этот селектор.Либо вы указываете не ту цель, либо указатель вашей цели меняется.

Трудно сказать, не увидев немного больше кода.Если вы создаете кнопку в IB, вы, вероятно, неправильно подключили свои выходы.

Редактировать: Исходя из вашего нового кода, похоже, что ваш объект MoveViewController не сохраняется должным образом.Чтобы получить информацию об экземпляре, который вы указали, вы можете включить MallocStackLoggingNoCompact так же, как вы включили NSZombieEnabled.Когда вы получаете сообщение об ошибке, вы можете использовать

malloc_history INSTANCE_ADDRESS

или

info malloc INSTANCE_ADDRESS

Это отличная статья для такого рода отладки

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

0 голосов
/ 18 сентября 2010

Я не выяснил причину, но ошибки были устранены путем перемещения представлений в одно XIB.

В любом случае, спасибо.

...