发送到实例的无法识别的选择器(self.navigationController.toolbar)

问题描述:

过去两天里我一直在用头撞墙 - 而且我需要帮助。发送到实例的无法识别的选择器(self.navigationController.toolbar)

在我的控制,我有这样的代码:

- (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

您是否注意到您的代码尝试调用NSCFNumber实例上的方法视图? –

+0

由于视图遍历,这不会崩溃。我认为你需要检查进口/出口代理的可行性。它可能会错误地释放。 –

+0

您的编辑建议您尝试访问已经发布并且不存在的对象。尝试修复断点。 – sElanthiraiyan

由于堆栈跟踪告诉:

- [NSCFNumber视图]:无法识别的选择发送到实例0x69db0e0

您意外overreleasing的东西,是导致此消息发送到某些悬摆指针(参考一些垃圾)。

检查您是否正在发布您的navigationController,ViewController或任何工作流程开始的地方。

+0

我会接受这个答案,因为它几乎是什么问题 - “过度放松某些东西”。出于某种原因,我在将它添加到数组之前创建了[button autorelease]。然后我还在dealloc中有[按钮释放]。我想,这两件事情一起造成了问题。 –