我更新了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!
。现在崩溃已经解决,一切都很完美。我对这种看似奇怪的行为感到困惑。为什么会发生这种情况......为什么它在第一种情况下没有起作用??
答案 0 :(得分:1)
当您尝试使用不正确的类型构建谓词时,通常会发生这种崩溃。
检查卖家的类型。如果它不是字符串,那么你就不应该使用%@。
例如,如果它是一个整数,那么这一行:
fetchRequest.predicate = NSPredicate(format: "sellerId = %@", self.mySellerId)
应该是:
fetchRequest.predicate = NSPredicate(format: "sellerId = %d", self.mySellerId)