“NSInvalidArgumentException”,原因:“此处不允许使用多对多键”

Ant*_*o K 2 core-data ios swift3

我已经看到了一些方法,但没有任何方法可以解决我的问题。

我创建了两个实体,商店和文章。Shop有“物品”和“店铺”的关系,都是多对多的有序关系。

在此处输入图片说明

对于商店,我有一个 CollectionViewController 和一个文章 TableViewController。选择一家商店后,我通过 segue 将其发送到 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)")
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我构建并运行并选择一家商店,该应用程序将因以下原因终止: “NSInvalidArgumentException”,原因:“此处不允许使用多个密钥”

我认为问题在于谓词,因为如果我将其注释掉并再次运行,然后选择商店它工作正常,但是所有商店都有我添加的相同文章。

如何仅获取所选商店的文章?

Dav*_*ton 6

尝试

 NSPredicate(format: "ANY shop = %@", currentShop!)
Run Code Online (Sandbox Code Playgroud)

或者,您可以只使用currentShop.articles? 这将返回 a Set,在这种情况下可能不适合您的目的,但是...通常您可以只关注关系。