ios - 使用 fetchrequest 谓词过滤掉某些核心数据项。

标签 ios swift core-data

所以我有两个实体。列表和评论。一个列表可以有多个关联的评论。

extension Listing {

    @NSManaged var listingTitle: String?
    @NSManaged var comments: NSSet?
    @NSManaged var listingLatitude: Double
    @NSManaged var listingLongitude: Double
}

extension Comment {

    @NSManaged var comment: String?
    @NSManaged var commentId: String?
    @NSManaged var rating: Int32
    @NSManaged var username: String?
    @NSManaged var listing: Listing?

}

使用 NSPredicate 我可以很容易地过滤掉位于特定地理区域的列表。

// Fetching data from CoreData
            let fetchRequest = NSFetchRequest()
            fetchRequest.predicate = NSPredicate(format: "listingLatitude BETWEEN {%f,%f} AND listingLongitude BETWEEN {%f,%f}", (latitude-0.10), (latitude+0.10), (longitude-0.10), (longitude+0.10))
            let entity = NSEntityDescription.entityForName("Listing", inManagedObjectContext: self.mainMoc)
            fetchRequest.entity = entity

            fetchRequest.sortDescriptors = [sortDescriptor]

            do {
                listings = try self.mainMoc.executeFetchRequest(fetchRequest) as! [Listing]

            }

这工作正常,但我如何完成过滤掉所有带有给定特定评级的评论的列表?

最佳答案

由于 comments 是一对多关系,您需要帮助 CoreData 确定您关注的是它们中的哪一个:ALL、ANY 或 NONE。例如:

fetchRequest.predicate = NSPredicate(format: "ANY comments.rating > 4")

将仅包括那些 Listings,其任何 Comments 的评级为 4 或更高,而:

fetchRequest.predicate = NSPredicate(format: "ALL comments.rating < 2")

仅当所有 Comments 的评分都低于 2 时才会包括它们。

关于ios - 使用 fetchrequest 谓词过滤掉某些核心数据项。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35125409/

相关文章:

ios - 在 SwiftUI 中实现外部显示器支持

swift - 如何检索所有可用的 Finder 标签?

ios - NSPredicate ALL 与 SQLite 存储的聚合

ios - 如何将类型颜色从 SwiftUI 存储到 CoreData 中?

ios - 从核心数据中获取 UIImage

ios错误: Thread 1 under @auto release pool "EXC_BAD_ACCESS

ios - 解码某些 Base64 字符串时出错,但不解码其他字符串

ios - 在 RxSwift 中嵌套订阅调用

ios - 如何在iOS上的mailto正文中插入换行符?

swift - 在 iOS 中使用核心蓝牙每 15 分钟从 BLE 设备获取数据