Swift: 如何在 Core Data 中过滤

Swift: How to filter in Core Data

我正在使用以下代码获取 "category" 中的所有数据。

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate

let managedContext = appDelegate.managedObjectContext!
let fetchRequest = NSFetchRequest(entityName:"category")
let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [NSManagedObject]?

如何只引入 "type" 等于 "products" 的类别?

为了 "filter" 在 Core Data 中产生结果,请像这样使用 NSPredicate

let filter = "products"
let predicate = NSPredicate(format: "type = %@", filter)
fetchRequest.predicate = predicate

您可以对 fetchedResults 使用 .filter。

所以,在下面的例子中

  1. 在第一步中,我们将添加要过滤的值。
  2. 在第二步中,我们将添加一个谓词,我们将在其中提供我们想要获取的值的数据库键,在我的例子中是“id”,除此之外,我们还想过滤一个值。
  3. 在第三步中,分配您的所有数据保存在 NSFetchRequest 中的实体名称。
  4. 之后分配谓词。
  5. 使用上下文对象获取对象。
private let context = (NSApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        
let filter = id
let predicate = NSPredicate(format: "id = %@", filter)
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName:"TodoListItem")
fetchRequest.predicate = predicate
                    
do{
    let fetchedResults = try context.fetch(fetchRequest) as! [NSManagedObject]
    print("Fetch results")
    if  let task = fetchedResults.first as? TodoListItem{
        print(task)
    }
                      
    //  try context.save()
            
}catch let err{
    print("Error in updating",err)
}