我正在开发一个应用程序,遇到问题时,用户最多可以创建5个个人资料。
问题:
致命错误:解开可选值:文件时意外发现nil
Info:
该应用的第一版具有一个结构,其中包含这些数据点:
打开应用程序后,它将通过func loadUser()
加载用户]
现在,在更新期间,我在用户结构中添加了一个新的数据点,因此现在看起来像这样:
现在,当调用func loadUser()
时,此语句失败:
首次打开应用程序时,它将创建5个空配置文件。然后,用户可以“激活”并填写这些个人资料,他/她会喜欢。致命错误:解开可选值:文件时意外发现nil
系统的构建方式:
我不确定如何处理此问题。如何在不导致应用程序崩溃的情况下将新数据点添加到我的结构中?
源代码:
struct User: Codable {
// Core user data
let id: Int
var profileName: String
var profileIcon: String
var profileSummary: String
}
class DataManager: NSObject {
/// Used to encode and save user to UserDefaults
func saveUser(_ user: User) {
if let encoded = try? JSONEncoder().encode(user) {
UserDefaults.standard.set(encoded, forKey: "userProfile_\(user.id)")
print("Saved user (ID: \(user.id)) successfully.")
}
}
/// Used to decode and load user from UserDefaults
func loadUser(_ userID: Int) -> User {
var user : User?
if let userData = UserDefaults.standard.data(forKey: "userProfile_\(userID)"),
let userFile = try? JSONDecoder().decode(User.self, from: userData) {
user = userFile
print("Loaded user (ID: \(user!.id)) successfully.")
}
return user!
}
/// Used to create x empty userprofiles ready to be used
func createEmptyProfiles() {
// May be changed, but remember to adjust UI
var profilesAllowed = 5
while profilesAllowed != 0 {
print("Attempting to create empty profile for user with ID \(profilesAllowed)")
let user = User(id: profilesAllowed, profileName: "", profileIcon: "", profileSummary: "Write a bit about your profile here..")
self.saveUser(user)
print("User with ID \(profilesAllowed) was created and saved successfully")
// Substract one
profilesAllowed -= 1
}
}
//MARK: - Delete profile
func deleteUser(user: User) -> Bool {
var userHasBeenDeleted = false
var userToDelete = user
// Reset all values
userToDelete.profileName = ""
userToDelete.profileIcon = ""
userToDelete.profileSummary = ""
// Save the resetted user
if let encoded = try? JSONEncoder().encode(userToDelete) {
UserDefaults.standard.set(encoded, forKey: "userProfile_\(user.id)")
print("User has now been deleted")
userHasBeenDeleted = true
}
return userHasBeenDeleted
}
}
我正在开发一个应用,在遇到问题时,用户最多可以创建5个个人资料。问题:致命错误:展开一个可选值时意外发现nil:文件信息:...
我找不到您的结构的任何问题。因其他原因导致崩溃。
两个选项: