• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 使用谓词查询核心数据

[复制链接]
菜鸟教程小白 发表于 2022-12-11 18:22:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

所以我正在使用 CoreData 构建这个应用程序。

我拥有的两个实体是列表和项目。它们有一对多的关系,即一个列表可以有多个项目。

例如ist1 有 Items: item1, item2

我已经编写了将项目存储在特定列表中的代码,但我很难弄清楚如何从特定列表中获取和处理项目。

到目前为止我所做的如下

func getItemsOnList(){

        let app = UIApplication.shared.delegate as! AppDelegate
        let context = app.persistentContainer.viewContext

        //fetchRequest to get the List
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "List")
        let predicate = NSPredicate(format: "title == %@", listName)
        fetchRequest.returnsObjectsAsFaults = false
        fetchRequest.predicate = predicate

        if let fetchResults = try? context.fetch(fetchRequest){
            if fetchResults.count > 0 {
                for listEntity in fetchResults {
                    let list = listEntity as! List
                    print(list.title as Any)
                    itemsOnList = list.contains!
                    print(itemsOnList)
                    print("The list with name:\(list.title)has \(itemsOnList.count) items")

                }
            }
        }
    }

此函数返回一个 NSSet,它假定包含该特定列表中的所有项目。

我的数据模型是:

Data model

我的问题是:

A.我编写 getItemsOnList() 函数的方式是否正确?还是我做错了什么。

B.鉴于代码是正确的,并且我得到的 NSSet 对所有项目都是正确的,我将如何获取该 NSSet 中的每个项目以便将其放在 TableView 上。



Best Answer-推荐答案


 func getItemsWithFilter(filterQuery:NSPredicate,sortBy:String?,order:Bool) -> Array<Items> {
var fetchedResults:Array<Items> = Array<Items>()


let fetchRequest = NSFetchRequest(entityName: "Items")
fetchRequest.predicate = filterQuery

if sortBy != nil{
  let sortDescriptor = NSSortDescriptor(key:sortBy! ,
                                        ascendingrder )
  let sortDescriptors = [sortDescriptor]
  fetchRequest.sortDescriptors = sortDescriptors
}

//Execute Fetch request you can go with your approach to
do {
  fetchedResults = try self.mainContextInstance.executeFetchRequest(fetchRequest) as! [Items]
} catch let fetchError as NSError {
  print("retrieveById error: \(fetchError.localizedDescription)")
  fetchedResults = Array<Items>()
}catch {
  fetchedResults = Array<Items>()
}

return fetchedResults

}

要调用此方法,您可以将谓词中的列表项作为查询传递给 fetch Items in which List.id == XXX

 let predicate = NSPredicate(format: "ANY list.name in %@", name)
let myResult = self.getItemsWithFilter(predicate,sortBy:nil,order:false)

关于ios - 使用谓词查询核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41257278/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap