У меня есть объект области продукта, подобный этому:
class Product : Object {
@objc dynamic var productID : String = ""
@objc dynamic var name : String = ""
@objc dynamic var unitPrice: Double = 0.0
@objc dynamic var quantity = 0
@objc dynamic var descriptionProduct : String = ""
@objc dynamic var hasBeenAddedToWishList : Bool = false
@objc dynamic var hasBeenAddedToCart : Bool = false
@objc dynamic var isNewProduct : Bool = false
var imagePaths = List<String>()
override static func primaryKey() -> String? {
return "productID"
}
func toDictionary() -> [String:Any] {
return [
"productID" : productID,
"name" : name,
"unitPrice": unitPrice,
"quantity": quantity,
"descriptionProduct": descriptionProduct,
"hasBeenAddedToWishList": hasBeenAddedToWishList,
"hasBeenAddedToCart": hasBeenAddedToCart,
"isNewProduct": isNewProduct,
"imagePaths": imagePaths
]
}
}
Я хочу обновить данные продукта, используя эту функцию:
static func updateProductDataInRealmDatabase(oldProductData: Product, newProductData: Product) {
guard let matchingProduct = RealmService.shared.realm.objects(Product.self).filter("productID == %@", oldProductData.productID).first else {return}
var newDataProductDictionary = newProductData.toDictionary() // the definition of toDictionary is in above code
newDataProductDictionary["productID"] = nil // to avoid updating the primary key
RealmService.shared.update(object: matchingProduct, for: newDataProductDictionary)
}
, и вот определение службы области дляобновить данные:
class RealmService {
private init() {}
static let shared = RealmService()
var realm = try! Realm()
func update<T: Object>(object: T, for dictionary: [String: Any]) {
do {
try realm.write {
for (key,value) in dictionary {
object.setValue(value, forKey: key)
}
}
} catch {
post(error)
}
}
}
Я действительно могу обновить некоторые данные, чтобы они были такими, как productName
, productPrice etc
, но я не могу обновить свойство imagePaths
, которое является List<String>
массив всегда будет нулевым после обновления данных, как показано на рисунке ниже, массив imagePaths станет нулевым:
![enter image description here](https://i.stack.imgur.com/jHUfJ.png)
так как правильно обновить данные продукта?особенно, чтобы обновить данные списка в моем объекте области.что здесь пошло не так?Я использую приведенный ниже код для обновления базы данных области:
func update<T: Object>(object: T, for dictionary: [String: Any]) {
do {
try realm.write {
for (key,value) in dictionary {
object.setValue(value, forKey: key)
}
}
} catch {
post(error)
}
}