Swift中的主页跳转登录功能

秀兰

我是新手,我正在尝试实现以下功能:当用户登录时,每次重新打开应用程序时,他们将直接进入主页,而不是登录页面。

我参考了该教程:https : //www.youtube.com/watch?v=gjYAIXjpIS8&t=146s并且我实现了像他一样执行的登录布尔检查,但是以某种方式遇到登录时重新打开主页的麻烦。我收到一条错误消息:[Presentation] Attempt to present <UITabBarController: 0x7fa68102ea00> on <IFTTT.ViewController: 0x7fa67fe0c150> (from <IFTTT.ViewController: 0x7fa67fe0c150>) whose view is not in the window hierarchy.

这是我的登录页面控制器类的方式:(这是打开应用程序时的入口点)我尝试以本教程的形式出现并进行表演,并且两者都在上面显示了相同的错误消息

import UIKit

class ViewController: UIViewController {
    

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        if isLoggedIn() {
            performSegue(withIdentifier: "logInJump", sender: nil)
        }
    }
    
    fileprivate func isLoggedIn() -> Bool {
        print("logged in status: \(UserDefaults.standard.bool(forKey: "isLoggedIn"))")
        return UserDefaults.standard.bool(forKey: "isLoggedIn")
    }
    
    @IBAction func signInButton(_ sender: Any) {
        print("sign in tapped")
        if let appURL = URL(string: "http://vocation.cs.umd.edu/flask/register") {
            UIApplication.shared.open(appURL) { success in
                if success {
                    print("The URL was delivered successfully.")
                } else {
                    print("The URL failed to open.")
                }
            }
        } else {
            print("Invalid URL specified.")
        }
    }


}

// button broder width
@IBDesignable extension UIButton {

    @IBInspectable var borderWidth: CGFloat {
        set {
            layer.borderWidth = newValue
        }
        get {
            return layer.borderWidth
        }
    }

    @IBInspectable var cornerRadius: CGFloat {
        set {
            layer.cornerRadius = newValue
        }
        get {
            return layer.cornerRadius
        }
    }

    @IBInspectable var borderColor: UIColor? {
        set {
            guard let uiColor = newValue else { return }
            layer.borderColor = uiColor.cgColor
        }
        get {
            guard let color = layer.borderColor else { return nil }
            return UIColor(cgColor: color)
        }
    }
}
这是我凌乱的故事板和segues: 故事板 我尝试添加一个导航控制器,应用程序入口点进入该导航控制器,并执行与视图控制器类相同的isLoggedIn,但它也有相同的错误。有人可以指导我解决该问题或其他更好的方法吗?自从我开始研究敏捷以来,我感到自己是盲人。谢谢!

格雷格432

您需要对您的请求进行线程处理以执行segue。因为你的呼唤performSegueviewDidLoad()什么情况是,加载之前的一切你的电话被调用,所以你需要引入一定的滞后性。

线程有时称为轻量级进程,因为它们具有自己的堆栈,但是可以访问共享数据。因为线程与进程以及进程中的其他线程共享相同的地址空间,所以线程之间通信的操作成本较低,这是一个优势

异步函数将等待promise的执行,而异步函数将始终返回promise。异步函数返回的promise将使用函数返回的任何值进行解析

长话短说,您需要等待所有内容都加载到内存中,并且如果您要从主堆栈/线程中调用函数,例如,viewDidLoad()那么很有可能尚未将其加载到内存中。意思是说,logInJumpsegue在那个视图控制器中那时不存在,因此是您的错误。

另一种可能性是您没有正确的视图/序列ID,但这应该引发了另一个错误。

另外,将发送者从更改nilself其实这是没有必要的,但我一直使用selfnil

// change to desired number of seconds should be higher then 0
let when = DispatchTime.now() + 0.2 

if isLoggedIn() {
    DispatchQueue.main.asyncAfter(deadline: when) {
      self.dismiss(animated: true, completion: nil)
      self.performSegue(withIdentifier: "logInJump", sender: nil)
    }        
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将登录页面放在主页中

来自分类Dev

如何使用easytabs jQuery插件防止主页中的命名锚跳转/滚动?

来自分类Dev

如何使用easytabs jQuery插件防止主页中的命名锚跳转/滚动?

来自分类Dev

使用angular在离子中从登录页面移动到主页

来自分类Dev

从主页面退出,跳过 Flutter 中的登录页面

来自分类Dev

CodeIgniter:登录主页

来自分类Dev

Python中的简单登录功能

来自分类Dev

Coffeescript中的FB登录功能

来自分类Dev

C#中的登录功能

来自分类Dev

实现跳转功能

来自分类Dev

在Ionic 5路由器中登录/注销时登录/主页没有被破坏

来自分类Dev

无堆栈功能的跳转/跳转编译策略

来自分类Dev

任意位置的Tab栏,类似于Swift中的Instagram主页

来自分类Dev

Swift中的功能图

来自分类Dev

Swift中的单行功能

来自分类Dev

Swift中的功能

来自分类Dev

Codeigniter主页上的登录表单

来自分类Dev

禁用ActiveAdmin登录以访问主页

来自分类Dev

登录表单中的“记住我”功能

来自分类Dev

无法在Azure功能中登录Azure服务

来自分类Dev

Windows 8.1中缺少自动登录功能

来自分类Dev

在登录屏幕中禁用辅助功能

来自分类Dev

使用RoboBrowser在单独文件中登录功能

来自分类Dev

如何修复PHP中的登录功能

来自分类Dev

PHP登录页面和主页在单个页面中,建议这样做吗?

来自分类Dev

在jsf2.2和primefaces中登录后重定向到默认(主页)页面

来自分类Dev

在flutter中如何根据登录的用户类型导航到特定的主页?

来自分类Dev

如何在片段 java 文件中添加功能以共享我在主页片段中创建的按钮?

来自分类Dev

Swift中的通用复制功能