什么是UICalloutBarButton,为什么它会让我的应用程序崩溃?

时间:2011-04-18 22:09:26

标签: iphone

我正在浏览我的iPhone应用程序的一些报告的崩溃报告,我对以下内容感到困惑。

它很可能在我的代码中崩溃 - 它可能是一个事件处理程序在某处调用错误的选择器。问题是我不知道这个代码是什么 - 我不知道UICalloutBarButton或UICalloutBar是什么。

另外,不用说,我不能在我的最终重现这一点,否则很容易弄清楚它发生在哪里。

Date/Time:       2011-03-18 14:33:13.373 +0100
OS Version:      iPhone OS 4.3 (8F190)
Report Version:  104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x317aaa1c __pthread_kill + 8
1   libsystem_c.dylib               0x355593b4 pthread_kill
2   libsystem_c.dylib               0x35551bf8 abort
3   libstdc++.6.dylib               0x33378a64 __gnu_cxx::__verbose_terminate_handler() + 376
4   libobjc.A.dylib                 0x364b506c _objc_terminate
5   libstdc++.6.dylib               0x33376e36 __cxxabiv1::__terminate(void (*)()) + 46
6   libstdc++.6.dylib               0x33376e8a std::terminate() + 10
7   libstdc++.6.dylib               0x33376f5a __cxa_throw + 78
8   libobjc.A.dylib                 0x364b3c84 objc_exception_throw
9   CoreFoundation                  0x354e21b8 -[NSObject(NSObject) doesNotRecognizeSelector:]
10  CoreFoundation                  0x354e1642 ___forwarding___
11  CoreFoundation                  0x35458178 _CF_forwarding_prep_0 + 40
12  CoreFoundation                  0x3544befc -[NSObject(NSObject) performSelector:withObject:]
13  UIKit                           0x35e259b2 -[UICalloutBar buttonPressed:]
14  CoreFoundation                  0x3544befc -[NSObject(NSObject) performSelector:withObject:]
15  UIKit                           0x35e25cd4 -[UICalloutBarButton sendCallback]
16  Foundation                      0x31d096ce __NSFireDelayedPerform
17  CoreFoundation                  0x354b5a40 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__
18  CoreFoundation                  0x354b7ec4 __CFRunLoopDoTimer
19  CoreFoundation                  0x354b883e __CFRunLoopRun
20  CoreFoundation                  0x35448ebc CFRunLoopRunSpecific
21  CoreFoundation                  0x35448dc4 CFRunLoopRunInMode
22  GraphicsServices                0x328e8418 GSEventRunModal
23  GraphicsServices                0x328e84c4 GSEventRun
24  UIKit                           0x35bffd62 -[UIApplication _run]
25  UIKit                           0x35bfd800 UIApplicationMain
26  app name                        0x000022d0 main + 36
27  app name                        0x0000226c start + 44

2 个答案:

答案 0 :(得分:5)

UICalloutBar是一个UIKit私有API。

我认为这是文本选择中出现的上下文菜单...(复制/粘贴...)

无论如何,这次崩溃真的很喜欢来自内部API。

所以我猜它是:

  • 一个苹果虫(检查iOS版本与崩溃发生)
  • 或者有越狱设备的人越来越脏/调整搞乱内部API

我担心你找到解决办法的可能性非常低。我希望我错了! :)

答案 1 :(得分:2)

我也遇到了这个API的崩溃。我允许我的tableView复制单元格,自动显示上下文复制菜单。

崩溃是用户单击导航栏的后退按钮而不是单击此菜单选项的结果。菜单不会被解散并保持浮动在窗口上,直到有人点击它。到这时,UITableViewController子类将从导航堆栈中弹出,从而导致将消息发送到解除分配的实例。

这可能是Apple UIKit的错误,我不确定。一种解决方案是在viewWillDisappear:方法中手动关闭菜单。

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [[UIMenuController sharedMenuController] setMenuVisible:NO animated:animated];
}