代码之家  ›  专栏  ›  技术社区  ›  user8977455

coredata中的更新不正确

  •  0
  • user8977455  · 技术社区  · 8 年前

    我正在更新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!)

    i、 e i更换 self.mySellerId 具有 self.theSellerIDLabel.text! .现在车祸解决了,一切都很顺利。我对这种看似奇怪的行为感到困惑。为什么会这样。。为什么在第一种情况下不起作用。。?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Taarna    8 年前

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

    检查sellerId的类型。如果不是字符串,则不应使用%@。

    例如,如果是整数,则此行:

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

    应为:

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