在iOS 9上我得到了以下错误:
-[UIApplication_handleNonLaunchSpecificActions:
forScene:
withTransitionContext:
completion:] unhandled action ->
<FBSSceneSnapshotAction: 0x150b2aef0>
{
handler = remote;
info = <BSSettings: 0x15333f650>
{
(1) = 5;
};
}有没有其他人遇到过这个错误或它的含义?怎么啦?
发布于 2016-01-20 22:07:06
你的代码没有什么问题。这是苹果公司内部的一条日志信息,你应该用雷达记录它。
有两个提示表明,这可能是苹果的代码:
_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion前面的下划线是一种惯例,它指示方法是私有/内部的,属于声明它的类的内部。(见这句话.)FBSSceneSnapshotAction中的两个字母前缀是FrontBoard的缩写,根据Ritchie在"iOS 9愿望-列表:嘉宾模式“是与发布应用程序相关的整个软件家族中的一部分“中的说法:使用iOS 8,苹果将其系统管理器SpringBoard重组为几个更小、更专注的组件。除了已经分拆来处理后台任务的BackBoard之外,他们还为前台任务添加了Frontboard。他们还添加了PreBoard,以在安全、加密的条件下处理锁定屏幕。..。
我不知道BS前缀在BSSettings中是什么意思,但是对这条日志消息的分析将表明它不是您做的任何事情,您应该用一个雷达记录记录消息的步骤。
如果您想要获取堆栈跟踪,可以实现与此相关的类别。有些人会争辩说,重写私有API是个坏主意,但在这种情况下,为了获取堆栈跟踪而进行的临时注入不会太有害。
编辑:
但是,我们还是想知道这个行动是什么。因此,我在-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]上放置了一个断点,并开始打印寄存器值,并找到了一个名为FBSceneImpl的类,它包含大量关于我的应用程序的信息:

我们能够找出调用next的私有方法(存储在程序计数器中,注册15)。

我试图找到日志中引用的未处理的FBSceneSnapshotAction,但没有骰子。然后,我对UIApplication进行子类化,并凌驾于_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion之上。现在我可以直接得到行动,但我们仍然不知道它是什么。
然后,我又看了看FBSceneSnapshotAction。原来它有一个名为BSAction的超类。
然后我编写了类似于工具的RuntimeBrowser,并查找了BSAction的所有子类。结果发现有很多这样的人:

我们拥有的两个方法名(一个来自日志,另一个来自设备上的程序计数器)表明,这些操作被用于在系统周围传递操作。
有些操作可能被发送到应用程序代表的回调,而其他操作则在内部处理。
这里发生的事情是,有一个动作没有被正确的处理,而系统注意到了它。很显然,我们不应该看到的。
https://stackoverflow.com/questions/32344082
复制相似问题