Swift:如何在Core Data中过滤

时间:2015-02-26 23:40:27

标签: swift core-data

我使用以下代码获取"类别"中的所有数据。

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]?

我如何仅将类别带入"类型"等于"产品"?

3 个答案:

答案 0 :(得分:24)

要在核心数据中“过滤”结果,请使用NSPredicate,如下所示:

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

答案 1 :(得分:0)

您可以在fetchedResults上使用.filter。

答案 2 :(得分:0)

所以,在下面的例子中

  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)
    
                 }