【问题标题】:What is UICalloutBarButton, and why does it make my app crash?什么是 UICalloutBarButton,为什么它会让我的应用崩溃?
【发布时间】:2011-08-08 05:53:22
【问题描述】:

我正在查看我的 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

【问题讨论】:

  • 第一步是弄清楚它什么时候崩溃:是在加载时立即崩溃,还是在执行某些操作之后?使用 NSLogs 和断点找出崩溃的位置。
  • 我不知道它在哪里崩溃了......这是来自 iTunes Connect 的崩溃日志之一。我无法重现它。
  • @Inspire48 BreakPoints on a Crash Report?... 我猜他无法重现那个错误,只有那个。
  • 当然你可以在崩溃报告中放置断点......没有意识到OP只有崩溃报告。没关系。

标签: iphone


【解决方案1】:

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

崩溃是由于用户单击导航栏的后退按钮而不是单击此菜单选项造成的。菜单不会被关闭并一直漂浮在窗口上,直到有人点击它。此时 UITableViewController 子类已从导航堆栈中弹出,从而导致将消息发送到已释放的实例。

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

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

【讨论】:

    【解决方案2】:

    UICalloutBar 是一个 UIKit 私有 API。

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

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

    所以我猜是:

    • 一个苹果错误(检查 iOS 版本与崩溃发生情况)
    • 或有人使用带有脏扩展/调整弄乱内部 API 的越狱设备

    恐怕您找到解决此问题的机会非常低。我希望我错了! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      相关资源
      最近更新 更多