Swift应用重启模拟器后JSON存储的用户凭据丢失问题求助
解决iOS模拟器重启后用户JSON数据丢失的问题
你的问题根源在于全局变量users每次App重启时都会被初始化为空数组,添加新用户时直接往空数组里追加,再覆盖原JSON文件,导致之前保存的用户数据被清空。
解决方案
在App启动时,先从JSON文件中读取已保存的用户数据并加载到users数组中,之后再执行添加新用户的操作,这样就能保留历史数据。
具体步骤及代码
- 确保
UserCredentials遵循Codable协议(你的编码逻辑能运行说明已实现,这里明确写出):
struct UserCredentials: Codable { let email: String let password: String let nickname: String }
- 实现加载用户数据的函数:
func loadUsers() { let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("users.json") // 文件不存在时初始化空数组 guard FileManager.default.fileExists(atPath: url.path) else { users = [] return } do { let data = try Data(contentsOf: url) // 解码JSON数据到users数组 users = try JSONDecoder().decode([UserCredentials].self, from: data) } catch { print("解码JSON失败: \(error)") // 解码失败时初始化空数组,避免后续操作出错 users = [] } }
- 在App启动时调用加载函数:
- 若为SwiftUI项目,在App结构体初始化中调用:
@main struct YourAppName: App { init() { loadUsers() } var body: some Scene { WindowGroup { ContentView() } } }
- 若为UIKit项目,在
AppDelegate启动方法中调用:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { loadUsers() return true }
- 原
save函数无需修改:现在添加新用户时,users数组已包含历史数据,追加新用户后写入文件会保留所有记录。
验证效果
重启模拟器或App后添加新用户,打开users.json文件即可看到历史用户数据和新添加的用户数据均被保留。
内容的提问来源于stack exchange,提问作者axandrei1234
相关产品推荐
相关产品推荐

