Нераспознанный селектор отправлен на экземпляр (self.navigationController.toolbar) - PullRequest
0 голосов
/ 04 ноября 2011

Последние два дня я бился головой об стену - и мне нужна помощь.

В моем контроллере у меня есть этот код:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationController.toolbar.barStyle = UIBarStyleBlack;
    [self.navigationController setToolbarHidden:NO];

    ... // the rest of initialisation goes here
}

Этот контроллер представляет детали одного элемента, выбранного из списка.Контроллер, отображающий список элементов, pushViewControllerAnimated на этом контроллере отображает сведения о элементе, выбранном пользователем.

Это прекрасно работает при первом выполнении, однако, когда пользователь нажимает кнопку назад - и затем выбирает другую(или даже тот же) элемент из списка, строка [self.navigationController setToolbarHidden:NO] вызывает SIGABRT с этой трассировкой стека:

2011-11-04 10:24:21.423 OOKL[32026:10403] -[NSCFNumber view]: unrecognized selector sent to instance 0x69db0e0
2011-11-04 10:24:21.426 OOKL[32026:10403] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFNumber view]: unrecognized selector sent to instance 0x69db0e0'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x019875a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x01adb313 objc_exception_throw + 44
    2   CoreFoundation                      0x019890bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x018f8966 ___forwarding___ + 966
    4   CoreFoundation                      0x018f8522 _CF_forwarding_prep_0 + 50
    5   UIKit                               0x0063223e -[UIToolbar setItems:animated:] + 1554
    6   UIKit                               0x005f8ccb -[UIViewController(UINavigationControllerContextualToolbar) setToolbarItems:] + 49
    7   OOKL                                0x0003df87 -[OOExplorerObjectDetailController setUpToolbarForExplore] + 1335
    8   OOKL                                0x0003eb2b -[OOExplorerObjectDetailController viewDidLoad] + 2043
    9   UIKit                               0x005fd089 -[UIViewController view] + 179
    10  UIKit                               0x005fb482 -[UIViewController contentScrollView] + 42
    11  UIKit                               0x0060bf25 -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 48
    12  UIKit                               0x0060a555 -[UINavigationController _layoutViewController:] + 43
    13  UIKit                               0x0060b870 -[UINavigationController _startTransition:fromViewController:toViewController:] + 524
    14  UIKit                               0x0060632a -[UINavigationController _startDeferredTransitionIfNeeded] + 266
    15  UIKit                               0x0060d562 -[UINavigationController pushViewController:transition:forceImmediate:] + 932
    16  UIKit                               0x006061c4 -[UINavigationController pushViewController:animated:] + 62
    17  OOKL                                0x0002ed8b -[OOExploreController showObjectDetailControllerWithObject:] + 571
    18  OOKL                                0x0002da1c -[OOExploreController parserDidFinish:] + 316
    19  OOKL                                0x00021c13 -[OOXMLParser parserDidEndDocument:] + 99
    20  Foundation                          0x00385717 _endDocument + 95
    21  libxml2.2.dylib                     0x02ad4215 xmlParseChunk + 7380
    22  Foundation                          0x0038615a -[NSXMLParser parse] + 321
    23  OOKL                                0x00021893 -[OOXMLParser parseString:] + 339
    24  OOKL                                0x0002d8d5 -[OOExploreController parseXml:] + 165
    25  OOKL                                0x0002d81f -[OOExploreController requestDidFinishLoading:] + 79
    26  OOKL                                0x00011cba -[OOSharedSeverController connectionDidFinishLoading:] + 298
    27  Foundation                          0x002ef112 -[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] + 108
    28  Foundation                          0x002ef06b _NSURLConnectionDidFinishLoading + 133
    29  CFNetwork                           0x013cd48e _ZN19URLConnectionClient23_clientDidFinishLoadingEPNS_26ClientConnectionEventQueueE + 220
    30  CFNetwork                           0x014986e1 _ZN19URLConnectionClient26ClientConnectionEventQueue33processAllEventsAndConsumePayloadEP20XConnectionEventInfoI12XClientEvent18XClientEventParamsEl + 293
    31  CFNetwork                           0x013c3c80 _ZN19URLConnectionClient13processEventsEv + 100
    32  CFNetwork                           0x013c3acf _ZN17MultiplexerSource7performEv + 251
    33  CoreFoundation                      0x019688ff __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
    34  CoreFoundation                      0x018c688b __CFRunLoopDoSources0 + 571
    35  CoreFoundation                      0x018c5d86 __CFRunLoopRun + 470
    36  CoreFoundation                      0x018c5840 CFRunLoopRunSpecific + 208
    37  CoreFoundation                      0x018c5761 CFRunLoopRunInMode + 97
    38  GraphicsServices                    0x01e601c4 GSEventRunModal + 217
    39  GraphicsServices                    0x01e60289 GSEventRun + 115
    40  UIKit                               0x0055bc93 UIApplicationMain + 1160
    41  OOKL                                0x00002d09 main + 121
    42  OOKL                                0x00002c85 start + 53
)

Я подумал, может быть, мне следует сначала настроить self.toolbarItems, прежде чем сделать панель инструментов видимой- но потом я получаю ту же ошибку, когда я

self.toolbarItems = [NSArray ...]

Я сейчас отчаялся - любая помощь приветствуется.

Редактировать : Теперь по какой-то причине яполучаю EXC_BAD_ACCESS вместо SIGABRT - в том же месте - и вообще не производится трассировка стека.

1 Ответ

0 голосов
/ 04 ноября 2011

Как показывает трассировка стека:

- [NSCFNumber view]: нераспознанный селектор отправлен в экземпляр 0x69db0e0

Вы случайно перевыпускаете что-то, что приводит к тому, что это сообщение отправлено некоему висячему указателю (ссылка на мусор).

Проверьте, выпускаете ли вы свой navigController, ViewController или что-то еще, где начинается ваш рабочий процесс.

...