Основные данные NSP предикат для многих отношений - PullRequest
0 голосов
/ 22 февраля 2012

У меня проблема с формулировкой моего запроса;это сценарий:

my DB schema

на основе этой схемы БД, я знаю, что часть именования немного отстой, но это проект, который уже запущен, поэтому яПридерживайтесь этого.

Теперь моя цель - выбрать всех персонажей с определенным pack_id и определенным category_id, т.е. всех персонажей из пакета 1 в категории 5, так что это мой NSPredicate

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(category_id == %@) AND (charRelationship.pack_id == %@)", [[cat valueForKey:@"category_id"] stringValue], curPack];
    [request setEntity:[NSEntityDescription entityForName:@"Category" inManagedObjectContext:self.managedObjectContext]];
    [request setPredicate:predicate];

    NSError *error;
    NSArray *result = [self.managedObjectContext executeFetchRequest:request error:&error];

как только компилятор пытается выполнить fetchRequest, он падает и переходит в SIGABRT.Я действительно ненавижу тот факт, что xcode даже не дает мне подсказку об исключении, чтобы я мог разобраться сам.Итак, после слепой попытки исправить это безуспешно, я задаюсь вопросом, есть ли кто-нибудь, кто мог бы помочь мне.Я уже переписал кучу других тем в SO и других местах, но я не смог найти никакого решения.

большое спасибо

-k-

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

попробуйте использовать ЛЮБОЙ для отношений:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(category_id == %@) AND (ANY charRelationship.pack_id like %@)", [[cat valueForKey:@"category_id"] stringValue], curPack];
0 голосов
/ 22 февраля 2012

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

[NSPredicate predicateWithFormat:@"catRel = %@", cat];

Однако я не уверен, что вы собираетесь делать с фрагментом.Я прав, что у вас есть сущность Category, хранящаяся в вашей переменной 'cat', и вы просто собираетесь выбрать ее из базы данных с помощью предиката?Я бы сказал, что category_id уже идентифицирует вашу категорию ... что угодно, попробуйте не пользователь "charRelationship.pasck_id ==% @", но загрузите соответствующий объект Character и используйте "charRelationship =% @" там, где вы только что поместили свой объект.

...