我想基于productID更新我的领域数据库,所以我不需要一遍又一遍地添加其他产品。假设 我想将productID =“ a”的产品数量更新为5 。
我试图写这样的东西。
let selectedProductID = "a"
let productsInRealmDatabase = realm.objects(Product.self)
let productIndex = productsInRealmDatabase.index(where: {$0.productID == selectedProductID})
if let productIndex = productIndex {
do {
try realm.write {
var productRealm = productsInRealmDatabase[productIndex]
productRealm.quantity = 5
productsInRealmDatabase[productIndex] = productRealm // ERROR HERE
}
} catch {
// error Handling
}
}
但是我在productsInRealmDatabase[productIndex] = productRealm
错误消息:无法通过下标分配:下标为仅获取
那么如何根据Realm中的某些属性更新领域对象?
答案 0 :(得分:2)
您应该使用Realm
自己的filter
方法,该方法接受NSPredicate
并在操作时返回自动更新的Results
实例,而不是Swift的filter
在Realm
个收藏夹上。比要么更新获取的产品的属性,要么创建一个新产品并将其保存到Realm
。
let selectedProductID = "a"
let productsInRealmDatabase = realm.objects(Product.self)
let matchingProduct = productsInRealmDatabase.filter("productID == %@", selectedProductID).first
if let matchingProduct = matchingProduct {
do {
try realm.write {
matchingProduct.quantity = 5
}
} catch {
// error Handling
}
} else {
let newProduct = Product()
newProduct.productID = selectedProductID
newProduct.quantity = 5
do {
try realm.write {
realm.add(newProduct)
}
} catch {
// error Handling
}
}
如果您希望Product
基于它们的productID
属性是唯一的,则还可以将productID
设置为primaryKey
子类的Object
class Product:Object {
@objc dynamic var productID = ""
...
override static func primaryKey() -> String? {
return "productID"
}
}
答案 1 :(得分:0)
尝试一下-
let selectedProductID = "a"
let productsInRealmDatabase = realm.objects(Product.self)
let filteredProducts = productsInRealmDatabase.filter("productID = \(selectedProductID)")
do {
try realm.write {
filteredProducts.forEach { product in
product.quantity = 5
}
}
} catch {
// error Handling
}
答案 2 :(得分:0)
当在插入功能内将数据插入数据库时,将update键标记为true,然后尝试更新该值。例如:
static func insertData() {
//Your insertion code//
try! realm.write {
realm.add(request, update: true)
}
}
static func updateData(productId: String, quantity: Int) {
let product = self.getProductData(prodId: productId)
let realm = try! Realm()
try! realm.write {
product?.quantity = quantity
}
}
希望这对您有所帮助。