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

