错误:iOS9中的_handleNonLaunchSpecificActions
我在iOS 9上遇到以下错误:
-[UIApplication_handleNonLaunchSpecificActions: forScene: withTransitionContext: completion:] unhandled action -> <FBSSceneSnapshotAction: 0x150b2aef0> { handler = remote; info = <BSSettings: 0x15333f650> { (1) = 5; }; }
有没有其他人遇到这个错误或它的影响? 哪里不对?
你的代码没有问题。 这是苹果内部的日志消息,你应该提供一个关于它的信息。
有两个提示显示这可能是苹果的代码:
-
_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
方法名称的下划线_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
是一个约定,表示该方法对于声明的类是私有的/内部的。(请参阅此注释 。 -
猜测
FBSSceneSnapshotAction
中的双字母前缀是FBSSceneSnapshotAction
的简写是合理的,根据Rene Ritchie在“ iOS 9愿望清单:访客模式”中所述,是与启动应用相关的整个软件家族的一部分:
在iOS 8中,苹果公司将其系统pipe理器SpringBoard重组为几个更小,更集中的组件。 除了已经分离出来处理后台任务的BackBoard之外,他们还为前台任务添加了Frontboard。 他们还增加了PreBoard来处理安全,encryption条件下的锁屏。 […]
我不知道BSSettings
的BS
前缀是什么,但是对这个日志消息的分析表明它不是你所做的任何事情,你应该向雷达提供步骤来重现日志消息。
如果你想尝试抓取一个堆栈跟踪,你可以实现链接到这里的类别 。 有人会认为重写私有API是一个坏主意,但在这种情况下,暂时注入来获取堆栈跟踪不会太有害。
编辑:
但是,我们仍然想知道这个动作是什么。 所以我把一个断点放在-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]
并开始打印出寄存器值,并find一个名为FBSceneImpl
的类,这个类FBSceneImpl
了我的应用程序的大量信息:
我们可以找出下一个被调用的私有方法(存储在程序计数器中,寄存器15)
我试图find日志中引用的未处理的FBSceneSnapshotAction
,但没有骰子。 然后,我分类UIApplication,并覆盖_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
。 现在我可以直接得到这个动作,但是我们仍然不知道它是什么。
然后,我再次查看了FBSceneSnapshotAction。 原来它有一个名为BSAction
的超类。
然后我写了一个类似于RuntimeBrowser 的工具 ,查找了BSAction的所有子类。 事实certificate,有相当多的列表:
我们拥有的两个方法名称(一个来自日志,另一个来自设备上的程序计数器)表明这些操作在引擎盖下用于在系统周围传递操作。
有些操作可能发送到应用程序委托的callback,而其他操作是内部处理的。
这里发生的是有一个处理不正确的行为,系统正在注意它。 显然,我们不应该看到它。