Проблема отношения основных данных ко многим - PullRequest
2 голосов
/ 16 марта 2012

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

(1) Еда может содержать много продуктов (2) Итема еды может быть связана со многими блюдами

enter image description here

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

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

- (NSFetchedResultsController *)fetchedResultsController 
{       
    self.context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 

    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Food" inManagedObjectContext:self.context];

    [fetchRequest setEntity:entity];

    NSPredicate *foodPredicate = [NSPredicate predicateWithFormat:@"meals == %@", self.meal];
    [fetchRequest setPredicate:foodPredicate];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.context sectionNameKeyPath:nil cacheName:nil];


    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;

    [fetchRequest release];
    [theFetchedResultsController release];

    return _fetchedResultsController;
}

1 Ответ

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

Только предикат должен измениться, я думаю:

NSPredicate *foodPredicate = [NSPredicate predicateWithFormat:@"ANY meals == %@", self.meal];

, поскольку meals теперь является набором.

...