2015-01-21 3 views
0

У меня есть 3 объекта: «Бар», «Официант», «Продукт», следующая связь: «Бар» имеет отношение «один» к «Официант», и то же самое от Waiter to Product.Фильтрация NSArray от NSmanagedObject с отношением один к одному

У меня есть массив Официантов, работающих на баре, и я хочу отфильтровать официантов на основе того, служили ли они определенному Продукту.

Im пытается фильтровать массив всех официантов в баре, [bar.toWaiter AllObjects]

До сих пор я пытался:

NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"toProduct.endSaleDate > %@ AND toProduct.published == YES", [NSDate date]]; 

и

NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"ANY toProduct.endSaleDate > %@ AND ANY toProduct.published == YES", [NSDate date]]; 

Я хочу только тех официантов, у которых есть продукт, который «опубликовал» для YES и endSaleDate в будущем. То, что я получаю, - это Официанты, которые либо опубликовали Продукт, либо продукт с будущей датой.

Как достичь того, что я ищу.

Спасибо!

enter image description here

+0

Если опубликован булева атрибут, попробуйте проверить toProduct.published == 1 –

+0

Это единственная проблема? – subharb

+0

Это моя догадка. Булевы хранятся в виде NSNumbers в Core Data и могут действительно вас поднять. Apple предлагает использовать [NSNumber numberWithBool: YES] при создании вашего предиката. https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html –

ответ

1

кажется, что предикат интерпретируется как «дай мне официант, которые имеют любой опубликованный продукт и любое изделие будущего». Но это не требует, чтобы такой же продукт выполняет как условий.

Вы можете использовать SUBQUERY для обеспечения того, чтобы:

[NSPredicate predicateWithFormat:"@"SUBQUERY(toProduct, $product, $product.published == 1 AND $product.endSaleDate > %@)[email protected] > 0"]; 
+0

спасибо, тот похоже работа. – subharb