watchOS 6 WKInterfaceImage 在释放时崩溃
watchOS 6 WKInterfaceImage crash on deallocation
自 watchOS 6 SDK 的第一个测试版以来,如果使用 watchOS 6.0 SDK 编译,我的应用程序开始崩溃。 watchOS 6.1 不会出现这些问题,而在模拟器中出现的频率更高。
现在我已经能够确定问题所在:
我有一个 WKInterfaceImage
正在显示一个使用一系列图像制作动画的微调器。如果我有一个新的 WKInterfaceController
被推送来显示这样一个微调器,它会在视图被关闭时崩溃。
在内部使用 SPInterfaceImageView
似乎被释放了两次。
这是 Xcode 日志消息:
-[SPInterfaceImageView release]: message sent to deallocated instance 0x3971ed60
有没有人遇到过同样的问题?我猜这是 watchOS SDK 中的一个错误。
我无法提供任何源代码,因为这只是通过使用 Storyboards 发生的。我的开发语言是Swift。
亲切的问候
亚历山大·海尼希
好吧,我问了这个问题后,我终于找到了导致这个问题的原因!
如果您的 watchOS 应用程序使用像我在问题中描述的微调器这样的动画图像,则 watchOS 6 SDK 有必要在 WKInterfaceController
被关闭之前调用 image.stopAnimating()
。
这可以在 didDeactivate()
方法中完成,也可以在关闭图像视图时完成。仅仅显示隐藏图像视图是不够的!当图像视图具有固定大小时,它也有帮助。
我希望这对收到其中一些错误消息的任何人有所帮助:
EXC_BAD_INSTRUCTION
在堆栈跟踪中具有 _UIImageContentContextualEffect .cxx_destruct
或上面提到的 -[SPInterfaceImageView release]: message sent to deallocated instance
我遇到了同样的问题,并设法通过为 startAnimatingWithImages(in:duration:repeatCount:)
的 repeatCount
参数传递一个非零值来解决这个问题
所以我得到了这样的结果:
setImageNamed("spinner")
startAnimatingWithImages(in: NSRange(location: 0, length: 6), duration: 0.75, repeatCount: 9999)
很奇怪,但它阻止了崩溃。
自 watchOS 6 SDK 的第一个测试版以来,如果使用 watchOS 6.0 SDK 编译,我的应用程序开始崩溃。 watchOS 6.1 不会出现这些问题,而在模拟器中出现的频率更高。 现在我已经能够确定问题所在:
我有一个 WKInterfaceImage
正在显示一个使用一系列图像制作动画的微调器。如果我有一个新的 WKInterfaceController
被推送来显示这样一个微调器,它会在视图被关闭时崩溃。
在内部使用 SPInterfaceImageView
似乎被释放了两次。
这是 Xcode 日志消息:
-[SPInterfaceImageView release]: message sent to deallocated instance 0x3971ed60
有没有人遇到过同样的问题?我猜这是 watchOS SDK 中的一个错误。
我无法提供任何源代码,因为这只是通过使用 Storyboards 发生的。我的开发语言是Swift。
亲切的问候
亚历山大·海尼希
好吧,我问了这个问题后,我终于找到了导致这个问题的原因!
如果您的 watchOS 应用程序使用像我在问题中描述的微调器这样的动画图像,则 watchOS 6 SDK 有必要在 WKInterfaceController
被关闭之前调用 image.stopAnimating()
。
这可以在 didDeactivate()
方法中完成,也可以在关闭图像视图时完成。仅仅显示隐藏图像视图是不够的!当图像视图具有固定大小时,它也有帮助。
我希望这对收到其中一些错误消息的任何人有所帮助:
EXC_BAD_INSTRUCTION
在堆栈跟踪中具有 _UIImageContentContextualEffect .cxx_destruct
或上面提到的 -[SPInterfaceImageView release]: message sent to deallocated instance
我遇到了同样的问题,并设法通过为 startAnimatingWithImages(in:duration:repeatCount:)
repeatCount
参数传递一个非零值来解决这个问题
所以我得到了这样的结果:
setImageNamed("spinner")
startAnimatingWithImages(in: NSRange(location: 0, length: 6), duration: 0.75, repeatCount: 9999)
很奇怪,但它阻止了崩溃。