错误:iOS9中的_handleNonLaunchSpecificActions

Rod*_*ddy 157 xcode objective-c ios ios9

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

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

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

Mos*_*she 9

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

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

  1. 引导方法名称的下划线_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion是一种约定,表示该方法是声明它的类的私有/内部.(请参阅此注释.)

  2. 可以合理地猜测前两个字母前缀FBSSceneSnapshotAction是FrontBoard的简写,根据Rene Ritchie的说法," iOS 9愿望清单:访客模式"是与启动应用程序相关的整个软件系列的一部分:

在iOS 8中,Apple将其系统管理器SpringBoard重构为几个更小,更集中的组件.除了已经分离出来处理后台任务的BackBoard之外,他们还为前台任务添加了Frontboard.他们还在安全的加密条件下添加了PreBoard来处理锁定屏幕.[...]

我不知道BS前缀BSSettings是什么,但对此日志消息的分析表明它不是你做的任何事情,你应该提交一个雷达,其中包含重现日志消息的步骤.

如果您想尝试获取堆栈跟踪,可以实现链接到此处的类别.有些人认为重写私有API是一个坏主意,但在这种情况下,临时注入以获取堆栈跟踪不会太有害.

编辑:

但是,我们仍然想知道这个动作是什么.所以我放了一个断点-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]并开始打印出寄存器值,发现一个叫做FBSceneImpl有关我的应用程序的大量信息的类:

现场

我们能够找出下一个调用的私有方法(存储在程序计数器中,寄存器15).

程序计数器

我尝试FBSceneSnapshotAction在日志中找到未处理的引用,但没有骰子.然后,我将UIApplication子类化,并覆盖_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion.现在我能够直接进行动作,但是,我们仍然不知道它是什么.

然后,我再次查看了FBSceneSnapshotAction.原来它有一个叫做的超类BSAction.

然后我编写了一个类似于RuntimeBrowser 的工具,并查找了BSAction的所有子类.事实证明,它们有很多列表:

行动清单

我们拥有的两个方法名称(一个来自日志,一个来自设备上的程序计数器)表明这些操作在引擎盖下用于在系统周围传递操作.

某些操作可能会发送到应用程序委托的回调,而其他操作则在内部处理.

这里发生的事情是有一个未正确处理的动作,系统正在注意它.显然,我们不应该看到它.

  • "错误"的答案是SpringBoard内部没有处理快照操作.这就是日志消息所说的内容.除了Apple以外,没有其他人可以告诉你. (2认同)