【问题标题】:Core Data One to Many Relationship Fetching核心数据一对多关系获取
【发布时间】:2021-06-10 15:56:20
【问题描述】:

在检索电影(一对多)关系的所有评论时,您将使用哪个 sn-p 代码以及为什么?

 static func getReviewsByMovieId(movieId: NSManagedObjectID) -> [Review] {
        
        // OPTION 1 
        // SQL call to get movie
        guard let movie = CoreDataManager.shared.getMovieById(id: movieId),
              // SQL call to get reviews for the movie
              let reviews = movie.reviews
              else {
            return []
        }
        
        return (reviews.allObjects as? [Review]) ?? []
        
        
        // OPTION 2
        // SQL call to get reviews for a particular movie
        let request: NSFetchRequest<Review> = Review.fetchRequest()
        request.predicate = NSPredicate(format: "movie = %@", movieId)
        
        do {
            return try CoreDataManager.shared.viewContext.fetch(request)
        } catch {
            return [] 
        }
        
    }

【问题讨论】:

    标签: ios core-data


    【解决方案1】:

    就我个人而言,我会做一些更像第一个的事情,但这主要是风格问题。除非您经常这样做,否则它对性能的影响不大。在这种情况下,我想同时尝试并分析结果。

    我不知道您的getMovieById(id:) 是如何工作的,但如果它使用提取请求,我建议将其替换为object(with:)existingObject(with:)。两者都只是通过 ID 查找对象而不需要谓词。第一个可能稍微快一点,第二个更安全,因此选择取决于您对对象 ID 有效的确定程度。

    【讨论】:

    • 是的 getMovieById 使用 existingObject(with: )。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    相关资源
    最近更新 更多