Я много искал здесь и не мог найти решение моей ситуации:
У меня есть TableViewController, который использует NSFetchedResultsController для отображения данных из CoreData.
Модель имеетСущность "Места", которая имеет отношение ко многим, называемое "Типы" (и обратное, также отношение ко многим).
В первом TableViewController я отображаю объекты из «типов» сущностей (каждое место может принадлежать более чем одному типу, а один тип может иметь более одного места).Когда пользователь нажимает на строку, он вызывает новый TableViewController, который будет отображать объекты из сущностей "Places", связанных с "Types", используя NSFetchedResultsController.
Я знаю, что мог бы просто использовать:
NSSet = [aType valueForKey:@"Places"];
Тем не менее, я действительно хочу использовать NSFetchedResultsController и все его преимущества.
Что ж, в методе доступа NSFetchedResultsController я смог воссоздать это отношение, используя:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Places"
inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSDictionary *types = [NSDictionary dictionaryWithObjectsAndKeys:self.theTypes, @"TYPES", nil];
NSPredicate *predicateAny = [NSPredicate
predicateWithFormat:@"ANY types IN $TYPES"];
NSPredicate *predicate = [predicateAny predicateWithSubstitutionVariables:types];
Этот кодработает нормально, так как возвращает «Места», связанные с «Типами», которые я хочу (они были сохранены внутри свойства theTypes).Я использую свойство (theTypes) в TableViewController для хранения всех объектов "Types", выбранных в исходном tableViewController.
Проблема заключается в том, что у сущности "Places" есть свойство с именем "distance", которое я такженеобходимо использовать в качестве фильтра внутри NSPredicate, например:
NSNumber *radious = [NSNumber numberWithDouble:10000.00];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"distance BETWEEN {0 , %@}", radious];
NSDictionary *types = [NSDictionary dictionaryWithObjectsAndKeys:self.theTypes, @"TYPES", nil];
NSPredicate *predicateAny = [NSPredicate
predicateWithFormat:@"ANY types IN $TYPES"];
NSPredicate *predicate = [predicateAny predicateWithSubstitutionVariables:types];
NSPredicate *thePred = [NSCompoundPredicate andPredicateWithSubpredicates:
[NSArray arrayWithObjects:predicate, pred, nil]];
[fetchRequest setPredicate:thePred];
Вот где возникает проблема: фильтр «расстояния», по-видимому, просто игнорируется предикатом в fetchRequest.В полученной выборке всегда есть места, которые не соответствуют @ "расстоянию между предложением {0,% @}.
Может кто-нибудь помочь мне выяснить, чего мне здесь не хватает?
Спасибомного! Даниэль