在事务中调用的+ [CATransaction synchronize]

时间:2011-08-25 19:38:13

标签: ios ipad locking catransaction

如果我在从服务加载数据时关闭我的iPad应用程序,该应用程序将关闭,但会立即再次打开,而不会执行任何操作。此时,我无能为力;我无法关闭应用程序,无法与应用程序或设备进行交互。再次使用该设备的唯一方法是重新启动它。该应用程序不会崩溃,它只是禁用该设备。

发生这种情况时,在 applicationWillResignActive applicationDidEnterBackground:

之后,控制台中会出现以下行:
+[CATransaction synchronize] called within transaction

如果应用程序崩溃几乎可以,但设备完全无用的事实是一个巨大的问题。如果我可以拦截这个错误或以某种方式检测 CATransaction 何时引发此问题,那就没关系了。

有什么想法吗?

2 个答案:

答案 0 :(得分:11)

当主线程上发生多个动画时会发生这种情况。我遇到了同样的问题。在我的情况下,应用程序冻结同时动画CALayer并同时旋转设备。所以我在旋转设备时停止了动画。

寻找代码

[CATransaction begin]

//foo
[CATransaction commit]

确保此代码中的动画与主线程上的其他动画不重叠。

答案 1 :(得分:0)

如果您使用UIWindow.rootViewController完全跳过情节提要,这会显示在日志中。

要放弃日志消息,您可以删除情节提要,在info.plist中删除将情节提要与您的应用相关联的键,在目标中将LaunchScreen.storyboard设置为Main Interface并使用

window = UIApplication.shared.keyWindow!

AppDelegate内部获取主要window并在其上分配您的UIViewController