2015-08-30 55 views
0

enter image description here如何過一對多關係向多個值

我想問練習表其在trainingdatesRel Trainingdates使用Trainingdate.day/month/year。 我想使用這樣的謂詞,但不要讓它起作用。

這樣的多對多關係是好的建議,還是在兩者之間使用映射表會更好?

 var dontAdd = false 
     // check if trainingdate already existst 
     let fetchRequest1 = NSFetchRequest(entityName: kExercises) 
     fetchRequest1.predicate = NSPredicate(format: "ANY trainingdatesRel.day==%i && ANY trainingdatesRel.month==%i && ANY trainingdatesRel.year==%i",day,month,year) 
     fetchRequest1.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)] 
     let results1 = managedObjectContext.executeFetchRequest(fetchRequest1, error: nil) as! [Trainingdates] 
     if results1.count > 0 { 
      dontAdd = true 
     } 
+0

從何種意義上說它不起作用? – pbasdf

+0

你爲什麼不提取適當的日期,然後結合他們關係中的所有練習?在這種情況下使用多對多的關係而沒有對匹配的特定限制會導致無效的日期構造(希望這有一定意義) – Wain

+0

錯誤是我得到了太多的結果。我想要一個謂詞:「給我所有訓練日期訓練日訓練日期= myDay AND trainingdayRel.month = myMonth AND trainingdayRel.year = myYear」。 –

回答

1

問題是CoreData分別評估每個ANY子句。因此,舉例來說,如果你在2015年8月尋找30,它會檢查是否有任何Trainingdates

    30日在八月
  • (任何月/年),並
  • (任何一天/年)和
  • 2015年(任何日/月)。

但是匹配的Trainingdate可能不同。如果ExerciseTrainingdates的 2013年7月,1 8月 2014年6月2日,它將匹配。

您需要改爲使用SUBQUERY;那麼它會評估每個Trainingday所有條件一氣呵成:

fetchRequest1.predicate = NSPredicate(format: "SUBQUERY(trainingdatesRel, $date, $date.day==%i && $date.month==%i && $date.year==%i)[email protected] > 0", day,month,year) 

這裏$date是代表每個Trainingdate依次(從trainingdatesRel關係)的佔位符。