Проблема с наблюдателями при использовании их с помощью Uiapplication () - PullRequest
0 голосов
/ 06 февраля 2019
class ViewController: UIViewController {
var check=UIApplication.didEnterBackgroundNotification{


    didSet{

        print("print some thing")
    }
}

override func viewDidLoad() {
    super.viewDidLoad()


 }}

Я запускаю этот код на своем iPhone, когда я вхожу в фоновый режим, он не выполняет печать

1 Ответ

0 голосов
/ 06 февраля 2019

Где не так

Ваш код правильно объявил любую переменную с типом класса.

Однако существует большая ошибка при создании экземпляра UIApplication.didEnterBackgroundNotification, который имеет тип class и имеет подклассы NSNotification.Name, который является struct.

Когда вы обращаетесь к переменной check, вы не можете установить ее, потому что ее неизменяемая структура означает, что вы не можете изменить ее (присвоить ей значение).Итак, наблюдатель свойства didSet не собирается звонить, следовательно, печать также не собирается звонить.Это ошибка.

Решение:

Мы можем использовать NotificationCenter для наблюдения за переходами переднего плана на задний план и наоборот для приложения iOS.

Из Apple Doc.s

Объекты регистрируются в центре уведомлений для получения уведомлений (объекты NSNotification) с использованием addObserver (_: селектор: имя: объект :) или addObserver (forName: объект: очередь: используя методы :).Когда объект добавляет себя в качестве наблюдателя, он указывает, какие уведомления он должен получать.Поэтому объект может вызывать этот метод несколько раз, чтобы зарегистрировать себя в качестве наблюдателя для нескольких различных уведомлений.

Каждое работающее приложение имеет центр уведомлений по умолчанию, и вы можете создавать новые центры уведомлений для организации связи в определенных контекстах..

Попробуйте это

Для переднего плана

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterForeground), name: UIApplication.didBecomeActiveNotification, object: nil)
}

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)

    NotificationCenter.default.removeObserver(self, name: UIApplication.didBecomeActiveNotification, object: nil)
}

@objc private func applicationDidEnterForeground() {

    //Do your stuff here
}

Для фона

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
}

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)

    NotificationCenter.default.removeObserver(self, name: UIApplication.didEnterBackgroundNotification, object: nil)
}

@objc private func applicationDidEnterBackground() {

    //Do your stuff here
}

Для получения дополнительной информации, пожалуйста, посетите

https://developer.apple.com/documentation/foundation/notificationcenter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...