Core Data一对多关系抓取



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

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 [] 
}

}

我个人更喜欢第一种方式,但这主要是风格问题。它不太可能影响性能,除非你经常这样做。在这种情况下,我想尝试两种方法并分析结果。

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

最新更新