You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift UIKit中根据isLogin变量跳转首屏失败问题排查

UIKit登录状态跳转异常问题

我用Swift UIKit开发项目,有个isLogin变量,预期isLogin为true时跳转到首页,但实际为true时还是跳转到注册页面。我在AppDelegate的application(_:didFinishLaunchingWithOptions:)方法里实现了跳转逻辑(代码如下),但始终无法跳转到首页,附上截图。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    let isLogin = UserDefaults.standard.bool(forKey: "isLogin")
    print("uygulama açılırken " , isLogin)

    if isLogin {
        print(isLogin)
        let username = UserDefaults.standard.string(forKey: "username")
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let homeMenuViewContr = storyboard.instantiateViewController(withIdentifier: "HomeMenuViewController") as! HomeMenuViewController
        homeMenuViewContr.userName = username
        window?.rootViewController = homeMenuViewContr
        print("calisti")
    } else {
        print("else kısmı " ,isLogin)
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let loginViewContr = storyboard.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
        let navigationController = UINavigationController(rootViewController: loginViewContr)
        window?.rootViewController = navigationController
    }
    
    window?.makeKeyAndVisible()

    return true
}

跳转异常截图

排查与解决方案

  • 确认UserDefaults赋值正确性:登录成功后必须确保isLogin被正确设置为true,代码示例:
    UserDefaults.standard.set(true, forKey: "isLogin")
    // iOS 12及以下建议添加同步,高版本可省略
    UserDefaults.standard.synchronize()
    
  • 检查Storyboard标识符一致性:打开Main.storyboard,确认HomeMenuViewController的Storyboard ID和代码中使用的HomeMenuViewController完全一致,注意大小写和拼写。
  • 初始化window对象:iOS 13+项目中,AppDelegate的window可能未自动初始化,需手动添加:
    window = UIWindow(frame: UIScreen.main.bounds)
    
    将这段代码放在设置rootViewController之前。
  • 取消Storyboard初始控制器:如果Main.storyboard中某个控制器勾选了Is Initial View Controller,它会覆盖代码设置的rootViewController,取消该勾选即可。
  • 验证代码分支执行:查看控制台是否打印了calisti,如果没打印,说明isLogin实际为false,需排查UserDefaults的取值逻辑。

内容的提问来源于stack exchange,提问作者Abdullah NUR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:05:09