EXC_BAD_ACCESS на iOS 13 - PullRequest
       41

EXC_BAD_ACCESS на iOS 13

1 голос
/ 15 октября 2019

Я поддерживаю проект, который был выполнен предыдущим разработчиком, и он часто ломается на iOS 13.

Авария всегда одна и та же, но в разных областях: Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffee3a48f88)

Обратите внимание, что это все еще работает в предыдущих версиях iOS, просто , а не в iOS 13.

Проблема возникает при попытке доступа к UIView. Например, происходит сбой в следующем фрагменте кода в строке cellView.layoutIfNeeded(). Это странно, потому что, конечно, существует _view, так как он входит в if let.

if let cellView = _view as? UITableViewCell {
    cellView.layoutIfNeeded()
}

Я также добавлю картинку из Xcode:

enter image description here

У меня такое ощущение, что сбой связанкак это _view лечится. Вы передаете представление следующим образом: objc_getAssociatedObject(self, &theKey) as? CustomView

Способ установки этого CustomView:

 var customView: CustomView? {
        get {
            return objc_getAssociatedObject(self, & theKey) as? CustomView
        }
        set {
            objc_setAssociatedObject(self, & theKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }

Кто-нибудь видел нечто подобное?

Я смотрелтакже в примечаниях к выпуску ios 13, и я не нашел ничего связанного.

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Попробуйте использовать блок GCD:

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
    // code here
}
0 голосов
/ 15 октября 2019

Попробуйте переименовать свойство _view во что-то менее общее.

Недавно я столкнулся с проблемой со свойством с именем _containerView, где оно выглядит из-за некоторых изменений в работе UIKit (написано вObjC) и диспетчеризация динамических методов, UIKit, вероятно, использует вашу переменную вместо своей собственной, которая вызывает сбой.

...