Невозможно использовать @ObservedObject на реальном iPhone

Я не могу отобразить свое представление, когда в нем используется @ObservedObject. Приложение вылетело, когда я пытаюсь представить его, и получаю такую ​​ошибку:

Поток 1: EXC_BAD_ACCESS (код = 1, адрес = 0x9)

Приложение отлично работает на симуляторе. Он вылетает только на моем

iPhone 6s iOS 13 beta 6

Xcode beta 5

Это мой основной код:

class NetworkManager: ObservableObject {

}

struct ContentView : View {
    @ObservedObject var networkManager: NetworkManager = NetworkManager()

    var body: some View {
        Text("Hi Stack")
    }
}

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

person SwiftiSwift    schedule 08.08.2019    source источник
comment
Ваш NetworkManager не соответствует ObservableObject? Вот пример репо, в котором используются MMVM и Combine. Я думаю, вам просто нужно добавить let objectWillChange = PassthroughSubject<NetworkManager,Never>() и вызывать его всякий раз, когда устанавливаются данные.   -  person DoesData    schedule 09.08.2019


Ответы (2)


Несоблюдение ObservableObject не является проблемой. Предоставленный вами код работает на холсте и в симуляторе, а также должен работать на устройстве. Я уже сталкивался с этой проблемой с iOS 13 Beta 6 в моем собственном проекте и потратил много времени на устранение неполадок.

Другие вещи (например, вызов self.presentationMode.value.dismiss() для закрытия модального представления) также в настоящее время не работают при запуске проектов, созданных с помощью Xcode Beta 5, на устройствах под управлением iOS 13 Beta 6. Были проблемы с предыдущими бета-версиями Xcode, не работающими на более новых бета-версиях iOS, и это может быть та же проблема.

Я бы посоветовал вам подождать, пока не будет выпущен Xcode Beta 6, чтобы внести какие-либо существенные структурные изменения в ваш код, поскольку iOS 13 Beta 6 могла быть разработана в ожидании обработки изменений, которые будут внесены в Xcode Beta 6.

При этом, если вам абсолютно необходимо внести изменения для обхода этой проблемы, я обнаружил, что использование @EnvironmentObject вместо @ObservedObject устраняет эту проблему. В вашем примере это будет означать объявление вашей собственности следующим образом:

@EnvironmentObject private var networkManager: NetworkManager

Затем, когда вы создаете свое представление, вы можете передать NetworkManager как объект среды следующим образом:

ContentView()
    .environmentObject(NetworkManager())
person graycampbell    schedule 08.08.2019
comment
Вы можете исправить отклонение PresentationModes, вызвав .wrappedValue вместо .value - person SwiftiSwift; 09.08.2019
comment
Я даже не подумал попробовать это. Спасибо! - person graycampbell; 09.08.2019
comment
Я ТАК ДОЛГО пытаюсь найти в Google эту проблему! Спасибо! - person cookednick; 13.08.2019
comment
XCode 11 beta 6 не решает проблему на моем iPhone iOS 13 beta 7. Я попробовал решение EnvironmentObject, но оно создало только другие ошибки времени выполнения. - person K. Law; 23.08.2019
comment
@ K.Law Если у вас возникают сбои, которые не удается устранить путем удаления экземпляров @ObservedObject, возможно, проблема в другом. Я предлагаю вам задать новый вопрос, чтобы мы могли увидеть, с какими ошибками вы сталкиваетесь. - person graycampbell; 23.08.2019
comment
Проблемы вызваны ObservedObject. EnviromentObject мне не помог, он выдает следующую ошибку: Поток 1: Неустранимая ошибка: не обнаружен наблюдаемый объект типа MYLocationManager.Type .. Я только что установил iOS 13 beta 8, и ошибка остается той же. - person K. Law; 23.08.2019
comment
@ K.Law Я понимаю, что вы получаете сообщение об ошибке, связанной с @ObservedObject, но это ошибка, отличная от той, которую испытывал исходный постер этого вопроса. Я вижу, что вы пришли сюда из-за вопроса, который уже задавали здесь. Можете ли вы обновить этот вопрос с помощью кода, вызывающего эту ошибку? - person graycampbell; 23.08.2019
comment
Извините, я подумал, что это та же ошибка. Однако весь код присутствует вместе с конкретной строкой, в которой появляется ошибка. Спасибо, что изучили это. Если бы вы могли прокомментировать этот вопрос, буду признателен. - person K. Law; 23.08.2019

Обновите свой проект, используя Xcode 11 beta 6. Это устраняет проблему. Я могу подтвердить это с помощью приложения, над которым я работаю. Наконец-то вышел сегодня!

person Nick Perkins    schedule 20.08.2019
comment
Вы запускаете приложение на телефоне? У меня есть код, который будет работать на iPad, но не на телефоне. - person K. Law; 23.08.2019
comment
Да, он работает на телефоне. Я тестирую iPhone 8 с установленной бета-версией. - person Nick Perkins; 28.08.2019