iOS9故事板什么是未处理的动作(handleNonLaunchSpecificActions)?

Ale*_*one 84 error-handling uistoryboard transition-coordinator ios9 xcode7

我注意到在使用故事板时在iOS 9上运行我的应用程序时,控制台中出现以下错误.我正在使用xCode7.这是我需要关注的吗?

-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> {
    handler = remote;
    info = <BSSettings: 0x176a5d90> {
        (1) = 5;
    };
}
Run Code Online (Sandbox Code Playgroud)

Mos*_*she 32

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

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

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

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

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

我不知道BS前缀BSSettings是什么,但是

BS是对此的简写BackBoard Settings,对此日志消息的分析表明它不是您所做的任何事情,您应该向雷达提交重现日志消息的步骤.

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

编辑:

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

现场

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

程序计数器

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

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

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

行动清单

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

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

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


val*_*ine 12

AFAIK,上面的信息在屏幕快照期间与iOS有关(我想双击家庭多任务相关的行为).我深深调查了我的应用程序,似乎没有得到任何副作用.你现在可以安全地忽略它.

您可以使用以下要点简单类别来测试您对上述函数的调用: