Доступ к пользовательскому интерфейсу ViewController из функции didInitiate после входа в систему - PullRequest
0 голосов
/ 16 февраля 2019

Версия для Mac OS: Mojave - 10.14.3

Версия XCode: 10.1

Проверено на обоих: ios 12.1 (iphone 8) и ios 10.3.3 (iphone 5c)

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

Моя единственная проблема - попытка обновить значения пользовательского интерфейса на текущем контроллере представления после успешной аутентификации.моя метка пользовательского интерфейса display_name становится нулевой после того, как приложение возвращается из фазы аутентификации в приложении Spotify или SFSafariViewController.Есть ли способ обновить display_name в didInitiate?

Странная часть в том, что он отлично работает на симуляции: DispatchQueue.main.async работает, но не на реальных устройствах

// In my ViewController.swift
class ViewController: UIViewController, SPTSessionManagerDelegate {
    @IBOutlet weak var display_name: UILabel!

    //protocol stubs for 'SPTSessionManagerDelegate'
    func sessionManager(manager: SPTSessionManager, didInitiate session: SPTSession)
    {
        print("success", session)

        DispatchQueue.main.async {
            self.display_name.text = "data from api" // Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
        }
    }
...

// In my AppDelegate.swift
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    lazy var rootViewController = ViewController()
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        rootViewController.sessionManager.application(app, open: url, options: options)
        print("application func")
        return true
    }
...
...