2017-02-25 64 views
2

我看到已經有一些方法,但沒有什麼能夠解決我的問題。'NSInvalidArgumentException',原因:'對多密鑰不允許在這裏'

我創建了兩個實體,Shop和Article。商店有關係「文章」和文章「商店」,都是很多很多和有序的關係。

enter image description here

對於店我有一個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)") 
    } 
} 

如果我建立和運行,並選擇一個店,用的理由終止應用程序: 「NSInvalidArgumentException」的,理由是:「一對多這裏不允許鍵」

我認爲問題在於謂詞,因爲如果我將其註釋掉並再次運行,然後選擇它的工作正常,但所有商店都有我添加的相同文章。

如何提取所選商店的商品?

+0

你的謂詞需要更多沿着店鋪關係包含currentShop。 – sschale

+0

什麼是謂詞,一些具體的例子? –

回答

3

嘗試

NSPredicate(format: "ANY shop = %@", currentShop!) 

,或者,你可以只使用currentShop.articles?這將返回一個Set,這可能不適合您在這種情況下的目的,但是......通常您可以關注關係。

+0

謝謝戴夫,它工作正常。就在ios 10之前,它適用於我的方法 –

相關問題