我有客戶端實體和作業實體。核心數據謂詞一對多和多對一的問題
每個工作都可以有一個客戶。客戶端的作業(客戶端< - >>作業)的關係稱爲jobOfClient。
每個客戶都可以有很多工作。客戶的工作(工作< < - >客戶)的關係稱爲clientOfJob。
(當然,這些都是反向關係。)
我有一些正在工作的謂詞,但最後一個沒有。留出一些fetchedResultsController的設置,這裏有一些代碼的關鍵行的三種情況:
在這裏,我通過排序工作,尋找未與任何客戶端的作業:
NSEntityDescription * entity = [NSEntityDescription entityForName:@"Job" inManagedObjectContext:dataInterface.managedObjectContext];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"clientOfJob == nil"];
這裏我理清工作,尋找一個特定的客戶端的工作:
NSEntityDescription * entity = [NSEntityDescription entityForName:@"Job" inManagedObjectContext:dataInterface.managedObjectContext];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"clientOfJob == %@", userState.selectedClient];
但這下一個不能正常工作。在這裏,我通過客戶端進行排序,查找與所選作業關聯的一個客戶端(如果沒有相關客戶端,則返回無結果,但這裏不是這種情況)。
NSEntityDescription * entity = [NSEntityDescription entityForName:@"Client" inManagedObjectContext:dataInterface.managedObjectContext];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"jobOfClient == %@", userState.selectedJob];
錯誤消息終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因:「一對多這裏不允許鑰匙」
一定有什麼微妙的在這裏,我不明白。有人可以幫助我提供**我提供的信息嗎?
謝謝。我能夠使用這個解決問題:NSPredicate * predicate = [NSPredicate predicateWithFormat:@「ANY jobOfClient ==%@」,userState.selectedJob]; - 任何關鍵字都會導致它查看集合中的所有內容。 – Jim