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

Swift中AppDelegate注册UserDefaults默认值,ViewController获取为nil问题

问题原因与解决方案

你的代码存在两个核心问题,导致无法获取到注册的默认值:

1. AppDelegate启动回调方法未被系统调用

你给application(application:didFinishLaunchingWithOptions:)方法加了private修饰符,并且参数类型使用了旧的[NSObject : AnyObject]?,这不符合系统要求的方法签名规则,系统根本不会执行这个方法里的代码——包括你注册UserDefaults默认值的逻辑。

正确的启动回调方法应该是:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    setupAppearance()
    
    // 注册UserDefaults默认值
    UserDefaults.standard.register(defaults: [
        "selectedUUID": "0"
    ])
    return true
}

2. 语法错误导致代码执行中断

你在UserDefaults.standard.synchronize()后面多写了一个点(.),这会直接触发编译错误。另外补充:iOS 10及以后,synchronize()已经被官方废弃,不需要手动调用,系统会自动处理UserDefaults的持久化操作。

额外优化建议

在ViewController中获取值时,不要用!强制解包,避免因值为nil导致崩溃,推荐用默认值兜底:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    let defaults = UserDefaults.standard
    let selectedUUID = defaults.string(forKey: "selectedUUID") ?? "0"
    
    print(selectedUUID)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:54:22