ios - 错误 : _handleNonLaunchSpecificActions in iOS9

我在 iOS 9 上收到以下错误:

    -[UIApplication_handleNonLaunchSpecificActions:
      forScene:
      withTransitionContext:
      completion:] unhandled action -> 
      <FBSSceneSnapshotAction: 0x150b2aef0> 
       {
            handler          = remote;
            info = <BSSettings: 0x15333f650> 
            {
                (1) = 5;
            };
        }

有没有其他人遇到过这个错误或它的含义?怎么了?

最佳答案

您的代码没有任何问题。这是 Apple 内部的一条日志消息,您应该提交有关它的雷达。

有两个提示表明这是可能苹果的代码:

  1. 方法名称前导的下划线 _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion 是一个约定,表明该方法是私有(private)的/在其声明的类中是内部的。(参见 this comment .)

  2. 有理由猜测 FBSSceneSnapshotAction 中的两个字母前缀是 FrontBoard 的简写,根据 Rene Ritchie 在“iOS 9 wish-list: Guest Mode" 中的说法,它是与启动相关的整个软件系列的一部分应用:

With iOS 8, Apple refactored its system manager, SpringBoard, into several smaller, more focused components. In addition to BackBoard, which was already spun off to handle background tasks, they added Frontboard for foreground tasks. They also added PreBoard to handle the Lock screen under secure, encrypted conditions. [...]

我不知道 BSSettings 中的 BS 前缀是做什么用的,但是对此日志消息的分析表明这不是您所做的任何事情,您应该归档带有重现记录消息步骤的雷达。

如果您想尝试获取堆栈跟踪,您可以实现 the category linked to here .有些人会争辩说,覆盖私有(private) API 是个坏主意,但在这种情况下,临时注入(inject)来获取堆栈跟踪不会太有害。

编辑:

但是,我们仍然想知道这个 Action 是什么。所以我在 -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion] 上放了一个断点,并开始打印寄存器值并找到一个名为 FBSceneImpl 的类,其中包含大量信息关于我的申请:

我们能够找出接下来调用哪个私有(private)方法(存储在程序计数器,寄存器 15 中。)

我试图找到日志中引用的未处理的 FBSceneSnapshotAction,但没有骰子。然后,我继承了 UIApplication,并覆盖了 _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion。现在我能够直接了解 Action ,但我们仍然不知道它是什么。

然后,我再次查看了 FBSceneSnapshotAction。原来它有一个名为 BSAction 的父类(super class)。

然后我写了a tool类似于 RuntimeBrowser并查找了 BSAction 的所有子类。事实证明,它们的列表相当多:

我们拥有的两个方法名称(一个来自日志,一个来自设备上的程序计数器)表明这些操作在后台用于在系统中传递操作。

一些操作可能会发送到应用代理的回调,而其他操作则在内部处理。

这里发生的情况是有一个操作未正确处理,系统正在记录它。显然,我们不应该看到它。

https://stackoverflow.com/questions/32344082/

相关文章:

objective-c - 开发像 Facebook 新 iOS 应用程序中的侧滑菜单的最佳方法是什

ios - 何时使用 dequeueReusableCellWithIdentifier 与 deq

ios - UIButton:如何使用 imageEdgeInsets 和 titleEdgeIns

iphone - 如何将 NSDictionary 转换为 NSData,反之亦然?

ios - 是否可以使用 UITableViewStylePlain 禁用 UITableView

ios - 如何在 UITableViewCell 之间添加间距

objective-c - cocoa objective-c类中变量前面的下划线如何工作?

objective-c - 在 Objective-C 中创建常量的最佳方法是什么

objective-c - IBOutlet 和 IBAction

ios - Xcode 调试器不打印对象并显示 nil,当它们不是时