发送到实例的无法识别的选择器(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
- 在同一个地方 - 而没有堆栈跟踪产生的。
由于堆栈跟踪告诉:
- [NSCFNumber视图]:无法识别的选择发送到实例0x69db0e0
您意外overreleasing的东西,是导致此消息发送到某些悬摆指针(参考一些垃圾)。
检查您是否正在发布您的navigationController,ViewController或任何工作流程开始的地方。
我会接受这个答案,因为它几乎是什么问题 - “过度放松某些东西”。出于某种原因,我在将它添加到数组之前创建了[button autorelease]。然后我还在dealloc中有[按钮释放]。我想,这两件事情一起造成了问题。 –
您是否注意到您的代码尝试调用NSCFNumber实例上的方法视图? –
由于视图遍历,这不会崩溃。我认为你需要检查进口/出口代理的可行性。它可能会错误地释放。 –
您的编辑建议您尝试访问已经发布并且不存在的对象。尝试修复断点。 – sElanthiraiyan