设置:iOS 9、Swift、XCODE 7.1 Beta
目标是在功能上构建购物车,为此我需要 CoreData 中的唯一值。
我有一个 UITableView,其中数据(产品名称、成本、数量、ID)是从 Parse 后端上传的。每个 TableView 自定义单元格都有一个按钮,点击它会将选定的行数据保存在 CoreData 中。
我不想在购物车中有重复的产品,所以在保存之前我想检查一下购物车中是否已经有该产品。如果有,我想用当前选择的数据替换购物车。如果没有,只想在购物车中添加新产品。
我的 CoreData 设置很简单。
Entity name = Cart
Attributes = pName(type String), pCost(type Int), pQuantity(type Int), orderID(type String)
添加商品到购物车按钮代码如下:
// Product data is retrieved in these variable
var pNam = NSMutableArray()
var pCost = NSMutableArray()
var pQty = NSMutableArray()
var pObjectID = NSMutableArray()
// Add to Cart button ....
let indexPath = NSIndexPath(forRow: sender.tag, inSection: 0)
let cell = tableView.cellForRowAtIndexPath(indexPath) as! ProductMenuTableViewCell! // Custom cell in which the button add to Cart button is placed
let entityDescription = NSEntityDescription.entityForName("Cart", inManagedObjectContext: managedObjectContext!)
let cart = Cart(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext)
cart.pName = pNam[indexPath.row].description
cart.pCost = pCst[indexPath.row].integerValue!
cart.pQuantity = pQty[indexPath.row].integerValue!
cart.orderID = pObjectID[indexPath.row].description
var error: NSError?
do {
try managedObjectContext?.save()
} catch let error1 as NSError {
error = error1
}
if let err = error {
print(err.localizedFailureReason)
} else {
print("Saved")
}
要不要直接用cell给CoreData加值?例如:cart.pName = cell.pName.text!
或者有更好的方法吗?任何人都知道如何解决这个问题?
最佳答案
您的数据设置很荒谬。 n
对象的 4 个属性有 4 个数组。如果出于任何原因改变了数组的排序,或者删除或添加了一个元素,您必须确保所有其他数组都发生同样的情况,这是维护的噩梦!如果以后你有 15 个属性,你如何扩展这个模型。使用 15 个数组?这太疯狂了。
相反,您应该有一个对象数组——理想情况下是核心数据对象——将适当的属性组合在一起。您始终可以保留一个标志以指示您希望稍后丢弃这些项目,而不是将它们保存在数据库中。
现在您不必决定是创建还是更新:只需将删除标志设置为 false
。
关于ios - 根据属性值搜索匹配增删CoreData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33232221/