ios - 核心数据在更新和现有记录时创建空条目
问题描述
问题:核心数据正在创建空条目,在发布之前我已经查看了所有可能的资源。
简短说明: 我有一个购物车,我在其中检查产品是否已经存在,如果存在,我将计数更新 1。如果它不存在,我将其添加到核心数据并显示我的收藏视图。
现状举例:
该值正在更新,但每次还会添加另一个空值。假设我单击添加到购物车,然后将其添加到购物车,当我再次单击计数时,计数已更新,但同时添加了另一个空条目。因此,如果我按添加到购物车按钮 5 次,主要对象的计数变为 5,但还会添加另外 4 个空条目。
图片:
添加到核心数据的代码
@IBAction func addToCartAction(_ sender: Any){
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let managedContext = appDelegate.persistentContainer.viewContext
let cartEntity = NSEntityDescription.entity(forEntityName: "Cart", in: managedContext)!
let imageViewModel = self.product?.images.items.first
let urlString: String = (imageViewModel?.url.absoluteString)!
let varientModel = self.product?.variants.items.first
let cart = NSManagedObject(entity: cartEntity, insertInto: managedContext)
if self.checkIfAlreadyInCart(handle: self.productHandle!)
{
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Cart")
request.predicate = NSPredicate.init(format: "productHandle = %@ AND variantName = %@", argumentArray: [self.productHandle!,self.selectedVariant!])
do {
let result = try managedContext.fetch(request) as? [Cart]
var currentValue = result![0].value(forKey: "productQty") as! Int
currentValue += 1
result![0].setValue(currentValue, forKey: "productQty")
try managedContext.save()
}
catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
else{
cart.setValue(1, forKey: "productQty")
cart.setValue( self.product?.title, forKeyPath: "productName")
cart.setValue( self.product?.price, forKey: "productPrice")
cart.setValue( self.product?.price, forKey: "productComparePrice")
cart.setValue(urlString, forKey: "productImageUrl")
cart.setValue(self.productHandle, forKey: "productHandle")
cart.setValue(varientModel?.id, forKey: "productVariantID")
cart.setValue(varientModel?.title, forKey: "variantName")
do {
try managedContext.save()
}
catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
}
self.checkIfAlreadyInCart(handle: self.productHandle!)
功能是:
func checkIfAlreadyInCart(handle: String) -> Bool{
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
do {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Cart")
request.predicate = NSPredicate.init(format: "productHandle = %@ AND variantName = %@", argumentArray: [self.productHandle!,self.selectedVariant!])
let result = try context.fetch(request)
if result.count > 0 {
return true
}
else {
return false
}
}
catch {
print("Some exception occured.")
return false
}
}
欢迎任何建议或解决方案。如果您能推荐一些了解核心数据的好地方,那就太好了,因为我对此知之甚少。
解决方案
推荐阅读
- c++ - ZeroMQ PubSub 使用 inproc 套接字永远挂起
- swift - 在 iOS Swift 中流式传输 Spotify preview_url
- pm2 - PM2 1个月后自动删除进程~
- database - Laravel:选择条件在另一个表中的所有电影
- android - Firestore 分页:使用 DocumentSnapshot 的 StartAfter 查询不起作用
- iccube-reporting - 使用 Measure 中定义的单元格属性来格式化 icCube 表
- php - how to receive data from user with request with less code in laravel
- selenium-webdriver - Unable to start appium server programmatically. Error: spawn ENOTDIR
- g1ant - What does mouse position argument signify in mouse.move command?
- c - getchar()函数的使用和解释