ios - 登录后在“didInitiate”函数中访问 ViewController UI
问题描述
Mac OS 版本:Mojave - 10.14.3
XCode 版本:10.1
测试:ios 12.1 (iphone 8) & ios 10.3.3 (iphone 5c)
我设法让身份验证工作,一切正常我可以使用他们的访问令牌从用户那里获取数据。
我唯一的问题是在成功验证后尝试更新当前视图控制器上的 UI 值,display_name
在应用程序从 Spotify 应用程序或 SFSafariViewController 的验证阶段返回后,我的 UI 标签变为 nil。有什么方法可以更新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
}
...
解决方案
推荐阅读
- java - 程序类型已经存在:org.apache.http.auth.AUTH Android
- winapi - 为什么将 EvtQuery 与 winapi crate 一起使用时会出现 ERROR_INVALID_PARAMETER?
- c - 如何在交流程序中显示错误(Windows 10)
- angular - 通过 Angular 中的 Injector 注入在一个令牌下注册的所有依赖项
- android-studio - 在android studio中创建新项目时如何更改默认包名称
- android - 如何在android中创建浮动布局?
- dart - Dart 错误:未处理的异常:类型 '_InternalLinkedHashMap
' 不是类型 'Map 的子类型 >' - android - 共享元素过渡重叠 BottomNavigationView
- javascript - 字符串替换为 JSON 中未转义的大括号
- facebook - 批处理消息中的请求过多。批量请求facebook api时最大批量大小为50?