3

我们的应用程序在 iOS14 中运行良好,但在 iOS15 中崩溃

ModalVC 中 contentViewController 的下一个响应者是 ModalVC。在 iOS14 和 15 中,modal 的解除分配发生在 contentVC 之前,这意味着 contentVC 的 nextResponder 在 contentVC 之前被解除分配。

2021-09-02 09:26:56.008505-0700 AppDevelopment[75463:1003950] ----------- ModalVC dealloc
2021-09-02 09:29:02.799891-0700 AppDevelopment[75463:1003950] ----------- NewPhotoAssetVC dealloc 

在我们的重现案例中,NewPhotoAssetViewController 是模态的 contentVC。在 NewPhotoAssetViewController 的 dealloc 方法中,如果我在 iOS14 中要求 nextResponder ,这就是我得到的:

(lldb) po [self nextResponder]
 nil 

但是,在 iOS15 上,如果我在同一个地方询问下一个响应者,我会得到:

(lldb) po [self nextResponder]
 2021-09-02 09:27:10.952742-0700 AppDevelopment[75463:1003950] *** -[ModalViewController retain]: message sent to deallocated instance 0x7fae0d6815b0
 error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0). 

该过程已返回到表达式评估之前的状态。似乎由于某种原因,contentVC 的 nextResponder 在 iOS15 中没有设置为 nil。然后,当我们向这个可能已更改为任何其他对象的垃圾指针发送消息时,我们会看到崩溃。

nextResponder 是只读的,所以我们不能明确地将它设置为 nil。不确定这是否是 Apple 错误,有没有办法解决这个问题?

4

0 回答 0