我已经看到了一些可以解决我问题的方法。
我创建了两个实体,Shop和Article。商店有关系"文章"和文章" shop",两者都是多对多和有序的关系。
对于商店我有一个CollectionViewController和文章TableViewController。选择一个商店后,我通过segue将其发送到ArticleTableViewController,在那里我可以将文章添加到当前商店。
ArticleTableViewController
var articles: [Article] = []
var currentShop: Shop?
@IBAction func pressAddButton(_ sender: UIButton) {
let article = Article(context: managedContext!)
article.name = "Milk"
currentShop?.addToArticles(article)
saveManagedContext()
tableView.reloadData()
}
func loadArticles () {
let articleFetchRequest: NSFetchRequest<Article> = Article.fetchRequest()
articleFetchRequest.predicate = NSPredicate(format: "shop = %@", currentShop!)
do {
articles = try managedContext.fetch(articleFetchRequest)
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
}
func saveManagedContext() {
do {
try managedContext?.save()
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}
如果我构建并运行并选择一个商店,应用终止的原因是: &#39; NSInvalidArgumentException&#39;,原因:&#39;这里不允许使用多对键&#39;
我认为问题是谓词,因为如果我将其评论并再次运行然后选择商店它可以正常工作,但所有商店都有我添加的相同文章。
如何仅提取所选商店的文章?
答案 0 :(得分:3)
尝试
NSPredicate(format: "ANY shop = %@", currentShop!)
或者,您可以只使用currentShop.articles
吗?这将返回Set
,在这种情况下可能不适合您的目的,但是...通常您可以关注关系。