gpt4 book ai didi

ios - swift 4 : Navigation Controller unwanted looping

转载 作者:行者123 更新时间:2023-12-01 16:06:20 25 4
gpt4 key购买 nike

我有以下代码:

import UIKit
import FacebookLogin

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

if AccessToken.current != nil {
// Already logged-in
// Redirect to Home View Controller
goToHome()
}

// Add LoginButton
let loginButton = FBLoginButton(permissions: [ .publicProfile, .email, .userFriends ])
let screenSize:CGRect = UIScreen.main.bounds
let screenHeight = screenSize.height // real screen height
//let's suppose we want to have 10 points bottom margin
let newCenterY = screenHeight - loginButton.frame.height - 20
let newCenter = CGPoint(x: view.center.x, y: newCenterY)
loginButton.center = newCenter
view.addSubview(loginButton)

// Triggered after every successfully login / logout
NotificationCenter.default.addObserver(forName: .AccessTokenDidChange, object: nil, queue: OperationQueue.main) { [weak self] _ in
if AccessToken.current != nil {
// Successfully just Logged in
// Redirect to Home View Controller
self?.goToHome()
} else {
// Successfully just Logged out
}
}
}

func goToHome() {
let storyboard = UIStoryboard(name: "HomeAfterLogIn", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "HomeAfterLogInViewController") // I called mine like that (check screenshot below)
self.navigationController?.pushViewController(vc, animated: true)
}

}

此代码允许用户使用 Facebook SDK 登录我的应用程序。 LaunchScreen.storyboard 如下:

enter image description here

然后导致 Main.storyboard,它看起来像这样:

enter image description here

如果用户登录成功,会被带到HomeAfterLogIn.storyboard,如下图:

enter image description here

但是,一旦用户登录,即用户成功登录,此页面就会持续加载,显示“已登录”标签,然后一遍又一遍地重新加载,而我只想加载一次。如果用户之前登录过,页面只加载一次,代码如下:
if AccessToken.current != nil {
// Already logged-in
// Redirect to Home View Controller
goToHome()
}

但是如果用户是新用户/第一次使用,它会循环,所以我认为错误在这里:
// Triggered after every successfully login / logout
NotificationCenter.default.addObserver(forName: .AccessTokenDidChange, object: nil, queue: OperationQueue.main) { [weak self] _ in
if AccessToken.current != nil {
// Successfully just Logged in
// Redirect to Home View Controller
self?.goToHome()
} else {
// Successfully just Logged out
}
}

最佳答案

我可以从你的最后一张截图中看到你的 HomeAfterLogInViewController 在 storyboard 中您已设置 自定义类 归因于 ViewController这意味着您正在将 HomeAfterLogInViewController 的 UI 与 ViewController.swift 链接起来。看来你陷入了困境。

每个 Storyboard UI ViewController 都必须链接到一个代表特定 ViewController 逻辑的 swift 类。

这意味着在您的上一个屏幕截图中,您会在右侧的自定义类中看到将 ViewController 替换为 HomeAfterLogInViewController (应该与您拥有的文件名相同 HomeAfterLogInViewController.swift )

enter image description here

关于ios - swift 4 : Navigation Controller unwanted looping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59832773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com