Проблема предикатов NSFetchResultsController - PullRequest
0 голосов
/ 01 сентября 2011

enter image description here

У меня проблема с тем, как сформулировать NSPredicate для получения правильных данных. У меня есть три объекта (Предложение, Список, Элемент) и объект OfferMatch, который соответствует предложению для каждой пары (Список, Элемент).

Я пытаюсь получить все предложения из выбранного списка, но разные товары могут иметь одно и то же предложение, и когда я их получаю, я получаю дубликаты некоторых предложений. Я хочу получить четкий ответ без каких-либо предложений, показанных более одного раза.

Я пытался использовать:

[NSFetchRequest setResultType:NSDictionaryResultType] 
[NSFetchRequest ssetPropertiesToFetch: 
[NSFetchRequest ssetReturnsDistinctResults:YES]

, но NSFetchResultsController вообще не поддерживает NSDictionaryResultType.

Вот пример кода, когда я настраиваю NSFetchResultsController:

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    // I'm interested in both Offer of OfferMAtch entity to get, so you can select more usefull for you 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Offer or OfferMatch" inManagedObjectContext:[CoreDataHandler context]];
    [request setEntity:entity];
    // I want to get all Offers from selected List, but with each one being only once
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@" ---- HERE IS MAGIC --- "];
    [request setPredicate:predicate];
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"categoryID" ascending:NO];
    NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"descriptionString" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, sortDescriptor2, nil];
    [request setSortDescriptors:sortDescriptors];
    [sortDescriptors release];
    [sortDescriptor release];
    [sortDescriptor2 release];
    if (self=[[OfferFetchResults alloc] 
              initWithFetchRequest:request 
              managedObjectContext:[CoreDataHandler context] 
              sectionNameKeyPath:@"categoryID"
              cacheName:nil]) 
    {
        self.delegate = self;
    }
    [request release];
    [self performFetch:nil];

Я не очень хорошо формулирую сложные NSP-предикаты. Я надеюсь, что кто-нибудь поможет мне, потому что Руководство по программированию NSPredicate не поможет мне.

1 Ответ

0 голосов
/ 14 марта 2012

Решено ... Я перестал пытаться подготовить NSPredicate. Я просто изменил модель БД, удалив сущность OfferMatch, а затем добавив соответствующие отношения непосредственно между основными сущностями.

...