【发布时间】:2015-12-14 21:10:39
【问题描述】:
在我的 API 上,我在 Stands 和 Products 之间建立了关系。哪些展位有产品,但产品也可以在不同的展位上找到。我正在尝试使用 Realm 在我的 iOS 应用程序上复制这种关系,但我似乎无法让它工作。
建立这种关系的目标是能够搜索销售特定产品的展台。
我的模特:
class Stand: Object {
dynamic var id : Int = 0
dynamic var name : String = ""
dynamic var latitude : Double = 0.0
dynamic var longitude : Double = 0.0
let products = List<Product>()
override static func primaryKey() -> String? {
return "id"
}
}
class Product: Object {
dynamic var id : Int = 0
dynamic var name : String = ""
let stands = List<Stand>()
override static func primaryKey() -> String? {
return "id"
}
}
在对 Stands 进行 API 请求时,我也会检索相关的 Products。当我将这些附加到 Stands 时,它适用于我的 Stands 模型,因为产品通常只是添加到 List() 中。
但所有产品都是单独创建的,没有附加任何支架。
有没有办法在创建产品时直接将这些展位分配给产品?就像反过来一样?
我目前的解决方案是这样的..
func retrieveAndCacheStands(clearDatabase clearDatabase: Bool?) {
backend.retrievePath(endpoint.StandsIndex, completion: { (response) -> () in
let listOfProducts : List<(Product)> = List<(Product)>()
func addProducts(stand: Stand, products: List<(Product)>?) {
for product in products! {
print(product.name)
let newProduct = Product()
newProduct.id = product.id
newProduct.name = product.name
newProduct.stands.append(stand)
try! self.realm.write({ () -> Void in
self.realm.create(Product.self, value: newProduct, update: true)
})
}
listOfProducts.removeAll()
}
for (_, value) in response {
let stand = Stand()
stand.id = value["id"].intValue
stand.name = value["name"].string!
stand.latitude = value["latitude"].double!
stand.longitude = value["longitude"].double!
for (_, products) in value["products"] {
let product = Product()
product.id = products["id"].intValue
product.name = products["name"].string!
stand.products.append(product)
listOfProducts.append(product)
}
try! self.realm.write({ () -> Void in
self.realm.create(Stand.self, value: stand, update: true)
})
addProducts(stand, products: listOfProducts)
}
print(Realm.Configuration.defaultConfiguration.path!)
}) { (error) -> () in
print(error)
}
}
这会存储支架并向其中添加产品。它还会创建所有产品并为每 10 个 ish 产品添加 1 个展位 (?)。
我似乎无法弄清楚如何进行这项工作。还有其他人知道如何解决这个问题吗?还是更好的解决方案?
【问题讨论】: