我不確定如何將幾個條件「層疊」到NSPredicate中。配置多個條件的NSPredicate
我對Core Data相當陌生,並不確定這是否是實現我所期望的目標的正確方法。
這裏是我想要做的事:
有是有一個Location對象,其中有photosTookThere的逆一個whereTook關係的照片對象。
該照片又有一個名爲isFavourite的NSNumber屬性。
我想配置一個NSFetchRequest,它將首先檢查photosTookThere是否存在,如果是,請檢查每個生成的Photo對象並只返回設置爲收藏夾的那些對象。
這裏是到目前爲止的代碼:
request.entity = [NSEntityDescription entityForName:@"Location" inManagedObjectContext:context];
request.sortDescriptors = [NSArray arrayWithObject[NSSortDescriptorsortDescriptorWithKey:@"locationId" ascending:YES]];
request.predicate = [NSPredicate predicateWithFormat:@"[email protected] != 0"];
我怎麼會級聯第二個條件到謂語和返回正確的結果?
謝謝,我將爲將來考慮關於約定的評論 - 我是Core Data的新手。 我仍然有一個問題,雖然: 2011-05-15 17:52:24.346 CL位置[14321:207] ***終止應用程序由於未捕獲的異常'NSInvalidArgumentException',原因:'keypath isFavourite不是找到實體' 我猜這是因爲isFavourite是在Photo對象上,而不是位置。 photosTook有一個NSSet。我如何說出這是一個NSSet的謂詞,並且應該在集合中的每個成員上檢查是否應該使用Favourite? –
Will
2011-05-15 16:53:34
我明白了。是的問題是,一個參數是用於位置,另一個用於照片。我認爲你的關係命名讓我感到困惑。如果我理解正確,那麼你將獲取照片,所以你的NSEntityDescription應該反映這一點。你想要做的是讓你查詢的位置對象。然後,您可以將謂詞更改爲@「(whereTook ==%@)AND(isFavourite ==%@)」,[self location],[NSNumber numberWithBool:YES]。將[自己的位置]替換爲您擁有位置對象的任何位置。希望這可以幫助。 – 2011-05-15 22:56:28
謝謝;仍然有一些麻煩,但我會做一些額外的背景閱讀,以防萬一我失去了一些非常明顯的東西。我甚至可能會重新命名這些關係,以便它們符合適當的慣例。 – Will 2011-05-17 22:21:05