Моя модель данных выглядит следующим образом ...Соединение предиката не работает с MagicalRecord Fetch
< MNMerchant - (отношения категории) - >> MNCategory (CategoryId)
MNCategory имеет обратную связь с MNMerchant называемых «торговцами».
Контроллер my view отображает торговцев на карте. Первая выборка, которая ограничивает результаты по географическим границам карты работает отлично ...
NSMutableArray *filters = [NSMutableArray array];
NSMutableString *rectPred = [NSMutableString stringWithFormat:@"lng > %lf AND lng < %lf AND lat < %lf AND lat > %lf", northWestCorner.longitude, southEastCorner.longitude, northWestCorner.latitude, southEastCorner.latitude];
[filters addObject:[NSPredicate predicateWithFormat:rectPred]];
NSArray *merchantsInRect = [[MNMerchant MR_findAll] filteredArrayUsingPredicate:[NSCompoundPredicate orPredicateWithSubpredicates:filters]];
Моим данные выборки/тест правильно возвращает 3 продавцов. Вот выход журнала ...
FILTERS = (
"lng > -105.961313 AND lng < -104.2035 AND lat < 41.048607 AND lat > 38.927436"
)
RESULTS = 3 MERCHANTS IN RECT
Я тогда взять категории для принесенных торговцев и заполнить меню, используемое для фильтрации карты по категориям. Меню всегда показывает действительные категории для продавцов в пределах отображаемых географических границ карты.
NSMutableArray *categories = [NSMutableArray arrayWithObjects:nil];
for(MNMerchant *merchant in merchantsInRect){
for(MNCategory *category in merchant.categories){
if([categories indexOfObject:category] == NSNotFound){
[categories addObject:category];
}
}
}
[_tray setCategories:categories];
Затем пользователь может выключить и включить эти категории, что позволяет второй выборки должны быть сделаны с добавленным набором фильтров ...
NSArray *merchantsForDisplay;
if(useFilters){
//FILTER MERCHANTS
if(_tray.selectedCategories.count == 0){
[filters addObject:[NSPredicate predicateWithFormat:@"merchantId = 0"]];
}else{
[filters addObject:[NSPredicate predicateWithFormat:@"ANY categories.categoryId IN %@", [_tray.selectedCategories valueForKey:@"categoryId"]]];
}
merchantsForDisplay = [MNMerchant MR_findAllSortedBy:@"sortName" ascending:YES withPredicate:[NSCompoundPredicate orPredicateWithSubpredicates:filters]];
}else{
merchantsForDisplay = merchantsInRect;
}
Записан выход при включении и отключении категории ...
FILTERS = (
"lng > -105.980539 AND lng < -104.222726 AND lat < 40.959464 AND lat > 38.835483",
"ANY categories.categoryId IN {2}"
)
RESULTS = 3 MERCHANTS IN RECT
Однако эта выборка не фильтрует до выбранных категорий. Он все еще возвращает 3 торговца. Вот что merchantsForDisplay выглядит, когда накинут и вошли ...
MERCHANT 16695
...HAS CATEGORY 1
MERCHANT 16719
...HAS CATEGORY 1
...HAS CATEGORY 2
MERCHANT 16712
...HAS CATEGORY 1
Я в полной растерянности понимая, почему мой «ANY categories.categoryId В% @» не работает. Помогите!
OMG. Это неловко. Спасибо. –