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

Swift应用重启模拟器后JSON存储的用户凭据丢失问题求助

解决iOS模拟器重启后用户JSON数据丢失的问题

你的问题根源在于全局变量users每次App重启时都会被初始化为空数组,添加新用户时直接往空数组里追加,再覆盖原JSON文件,导致之前保存的用户数据被清空。

解决方案

在App启动时,先从JSON文件中读取已保存的用户数据并加载到users数组中,之后再执行添加新用户的操作,这样就能保留历史数据。

具体步骤及代码

  1. 确保UserCredentials遵循Codable协议(你的编码逻辑能运行说明已实现,这里明确写出):
struct UserCredentials: Codable {
    let email: String
    let password: String
    let nickname: String
}
  1. 实现加载用户数据的函数:
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 = []
    }
}
  1. 在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
}
  1. 原save函数无需修改:现在添加新用户时,users数组已包含历史数据,追加新用户后写入文件会保留所有记录。

验证效果

重启模拟器或App后添加新用户,打开users.json文件即可看到历史用户数据和新添加的用户数据均被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:41:04