ios - 根据属性值搜索匹配增删CoreData

标签 ios swift core-data parse-platform

设置: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/

相关文章:

ios - 升级 iPhone/Xcode 破坏了我的 cocoapod 库

ios - 是否可以添加一个 UIView 作为 UINavigationBar 的背景

swift - 3个不同的碰撞体? Swift3 + Spritekit

ios - 核心数据获取速度慢

ios - UITableView:按部分中的日期和行中的时间对事件进行排序

ios - 通过导航 Controller 取消 View 后应用程序崩溃?

ios - UITapGestureRecognizer 和 UIButton = EXC_BAD_ACCESS

iphone - 如何使用 xib 文件中的任何 subview (在 xib 中创建)的多个副本

ios - 核心数据多对多关系

ios - Swift 3 - 无法更改我的 Cell.AccessoryView 上的背景颜色