В моей модели пользователя хранить некоторый список, как это:Realm: Создание новых экземпляров пользователя удаляют сохраненные списки других пользовательских экземпляров
public final class User: Object, Mappable {
dynamic var id: Int = 0
dynamic var name: String? = nil
var addresses = List<Address>()
var children = List<Child>()
var godparents = List<User>()
}
откладывает пользователь с идентификатором 1 в Realm, с некоторыми адресами и дети, он отлично работает, и он сохраняется после того, как приложение убито.
Но когда я хочу создать совершенно новых пользователей, например пользователей с идентификаторами 2 & 3, пользователь с идентификатором 1 потеряет все данные списка (имя будет по-прежнему сохранено, но все адреса или дети будут потеряны). Что здесь не так?
Вот код, где я хочу, чтобы добавить пользователей 2 & 3 в списке крестных пользователя 1:
do {
try realm.write {
// users contains user 2 & 3
let users = self.users.map { (userData) -> User in
return realm.create(User.self, value: userData, update: true)
}
UserManager.currentUser?.godparents.removeAll()
UserManager.currentUser?.godparents.append(contentsOf: users)
}
} catch let error {
print(error) // no error is triggered at this point
}
После выполнения этого кода, пользователь 1 потерял все данные в адресах & детей
Вот код метода CurrentUser, если это необходимо (чтобы получить идентификатор пользователя 1):
struct UserManager {
static var currentUser: User? {
get {
guard let id = UserDefaults.standard.object(forKey: "current_user_id") else {
return nil
}
let user = realm?.object(ofType: User.self, forPrimaryKey: id)
return user
}
}
}
Включен ли пользователь 1 в этот 'self.users.map'? Поскольку 'update' равно true, если пользователь 1 находится там, он также будет обновлен. И если свойства 'address' и' children' присутствуют, но пусты, это очистит эти ранее существовавшие свойства. – TiM
Хммм, на самом деле вы правы, users.count относится только к этим двум пользователям, но один из этих пользователей содержит пользователя 1 в его свойства подсети (крестные родители). Все обновляется в конце, черт! –
Хахаха ага! Я так думала. Хорошо, я напишу официальный ответ на этот вопрос. – TiM