【问题标题】:Swift: How to filter in Core DataSwift:如何过滤核心数据
【发布时间】:2023-03-24 13:52:01
【问题描述】:

我正在使用以下代码来获取“类别”中的所有数据。

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

如何只引入“类型”等于“产品”的类别?

【问题讨论】:

  • 查看 NSPredicate

标签: swift core-data


【解决方案1】:

所以,在下面的例子中

  1. 在第一步中,我们将添加我们要过滤的值。
  2. 在第二步中,我们将添加一个谓词,在该谓词中,我们将给出我们想要获取值的 DB 键,在我的例子中是“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)
}

【讨论】:

    【解决方案2】:

    您可以在 fetchedResults 上使用 .filter。

    【讨论】:

    • 是的,你可以,但这是一个 Swift 函数。使用 NSDelegate 将过滤委托给 Core Data,这可以更有效,尤其是在大型数据集上。
    【解决方案3】:

    要“过滤”Core Data 中的结果,请像这样使用NSPredicate

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

    【讨论】:

    • 正是我想要的,完美:),为我工作。
    • type = %@ 是干什么用的?它有什么作用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2011-02-16
    相关资源
    最近更新 更多