Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift中的主页跳转登录功能_Ios_Swift_Xcode - Fatal编程技术网

Ios Swift中的主页跳转登录功能

Ios Swift中的主页跳转登录功能,ios,swift,xcode,Ios,Swift,Xcode,我是swift的新手,我正在尝试实现这样一个功能:当用户登录时,每次重新打开应用程序时,他们都会直接进入主页,而不是登录页面 我参考了教程:。我和他一样实现了登录布尔检查,但我在登录时遇到了重新打开主页的麻烦。我收到一条错误消息:[Presentation]尝试在其视图不在窗口层次结构中的(从)上演示。 这就是我的登录页面控制器类:(这是打开应用程序时的入口点)我尝试作为教程和performsegue呈现的方式,两者都显示了上面相同的错误消息 导入UIKit 类ViewController:U

我是swift的新手,我正在尝试实现这样一个功能:当用户登录时,每次重新打开应用程序时,他们都会直接进入主页,而不是登录页面

我参考了教程:。我和他一样实现了登录布尔检查,但我在登录时遇到了重新打开主页的麻烦。我收到一条错误消息:
[Presentation]尝试在其视图不在窗口层次结构中的(从)上演示。

这就是我的登录页面控制器类:(这是打开应用程序时的入口点)我尝试作为教程和performsegue呈现的方式,两者都显示了上面相同的错误消息

导入UIKit
类ViewController:UIViewController{
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后执行任何其他设置。
如果isLoggedIn(){
performsgue(标识符为“logInJump”,发送方:nil)
}
}
fileprivate func isLoggedIn()->Bool{
打印(“登录状态:\(UserDefaults.standard.bool(forKey:isLoggedIn”)))
返回UserDefaults.standard.bool(forKey:“isLoggedIn”)
}
@iAction func signInButton(\发送方:任意){
打印(“登录”)
如果让appURL=URL(字符串:http://vocation.cs.umd.edu/flask/register") {
UIApplication.shared.open(appURL){在中成功
如果成功{
打印(“URL已成功传递。”)
}否则{
打印(“URL打开失败。”)
}
}
}否则{
打印(“指定的URL无效”)
}
}
}
//钮扣宽度
@IBD可设计扩展按钮{
@IBInspectable var borderWidth:CGFloat{
设置{
layer.borderWidth=newValue
}
得到{
返回层。边界宽度
}
}
@i可检测的var角半径:CGFloat{
设置{
layer.cornerRadius=新值
}
得到{
返回层半径
}
}
@IBInspectable var borderColor:UIColor{
设置{
guard let uiColor=newValue else{return}
layer.borderColor=uiColor.cgColor
}
得到{
guard let color=layer.borderColor else{return nil}
返回UIColor(cgColor:color)
}
}

}
您需要将请求线程化以执行该过程。因为在
viewdiload()
中调用
performsgue
,发生的情况是在加载所有内容之前调用了您的调用,所以需要引入一些延迟

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

异步函数将等待承诺的执行,而 异步函数将始终返回一个承诺。承诺 异步函数返回的值将解析为任何值 由函数返回

长话短说,您需要等待所有内容加载到内存中,如果您正在从主堆栈/线程调用函数,例如
viewDidLoad()
,则很可能尚未将其加载到内存中。这意味着,
logInJump
segue在该视图控制器中的该点不存在,因此您的错误

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

另外,将发送者从
nil
更改为
self
。实际上这不是必需的,但我总是使用
self
over
nil

// 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)
    }        
}

您需要线程化您的请求以执行segue。因为在
viewdiload()
中调用
performsgue
,发生的情况是在加载所有内容之前调用了您的调用,所以需要引入一些延迟

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

异步函数将等待承诺的执行,而 异步函数将始终返回一个承诺。承诺 异步函数返回的值将解析为任何值 由函数返回

长话短说,您需要等待所有内容加载到内存中,如果您正在从主堆栈/线程调用函数,例如
viewDidLoad()
,则很可能尚未将其加载到内存中。这意味着,
logInJump
segue在该视图控制器中的该点不存在,因此您的错误

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

另外,将发送者从
nil
更改为
self
。实际上这不是必需的,但我总是使用
self
over
nil

// 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)
    }        
}

非常感谢您对我问题的仔细指导和解决!它可以工作,我对这些技术有更多的了解,但是当我用您的代码替换我的部分时,我会收到多个(相当多)警告:[Assert]不能在非主线程上用asCopy=NO调用。虽然它似乎和功能没有冲突,但有什么办法可以修复它吗?再次感谢您的帮助!我非常感激!非常感谢您对我问题的仔细指导和解决!它是有效的,我对这些技术有更多的了解,但当我用您的代码替换我的部分时,我会收到多个