coredata更新发生不正确

时间:2018-05-08 06:03:56

标签: ios swift core-data

我更新了coredata中的某个值,就像这样...

 let managedContext = self.appDelegate.persistentContainer.viewContext
 let fetchRequest: NSFetchRequest<ProductFields> = ProductFields.fetchRequest()

 fetchRequest.predicate = NSPredicate(format: "sellerId = %@", self.mySellerId) //CRASH HERE


 do {

   let array_categories = try managedContext.fetch(fetchRequest)
   let cat = array_categories[0]

   cat.setValue("1", forKey: "isSync")

   try managedContext.save()
   } catch let error as NSError {
          print("Could not save. \(error), \(error.userInfo)")
   }

但是它在fetchRequest.predicate = NSPredicate(format: "sellerId = %@", self.mySellerId)行崩溃了。它没有给出崩溃的任何具体原因..只是Thread 1: EXC_BAD_ACCESS...

但有点奇怪的事情发生了。我将一个标签拖到我的屏幕上,给它命名为sellerIdLabel左右......然后将sellerID的值分配给它。现在我修改了发生崩溃的行

fetchRequest.predicate = NSPredicate(format: "sellerId = %@", self.theSellerIDLabel.text!)

,即我将self.mySellerId替换为self.theSellerIDLabel.text!。现在崩溃已经解决,一切都很完美。我对这种看似奇怪的行为感到困惑。为什么会发生这种情况......为什么它在第一种情况下没有起作用??

1 个答案:

答案 0 :(得分:1)

当您尝试使用不正确的类型构建谓词时,通常会发生这种崩溃。

检查卖家的类型。如果它不是字符串,那么你就不应该使用%@。

例如,如果它是一个整数,那么这一行:

fetchRequest.predicate = NSPredicate(format: "sellerId = %@", self.mySellerId)

应该是:

fetchRequest.predicate = NSPredicate(format: "sellerId = %d", self.mySellerId)