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
相关产品推荐
相关产品推荐

