Основные данные NSP предикат для отношений - PullRequest
10 голосов
/ 29 мая 2009

Мой граф объектов прост.

У меня есть фидерный объект, который хранит информацию о RSS-каналах, и отношение, называемое Tag, которое ссылается на объект TagValues. И отношение (к и обратное) является ко-многим. то есть канал может иметь несколько тегов, а тег может быть связан с несколькими каналами.

Я сослался на Как выполнять запросы Core Data через отношения? и создал NSFetchRequest. Но когда я получаю данные, я получаю исключение:

NSInvalidArgumentException невыполненная генерация SQL для предиката

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

Спасибо

-

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FeedEntry" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"authorname" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

[fetchRequest setSortDescriptors:sortDescriptors];

NSEntityDescription *tagEntity = [NSEntityDescription entityForName:@"TagValues" inManagedObjectContext:self.managedObjectContext];
NSPredicate *tagPredicate = [NSPredicate predicateWithFormat:@"tagName LIKE[c] 'nyt'"];          
NSFetchRequest *tagRequest = [[NSFetchRequest alloc] init];
[tagRequest setEntity:tagEntity];
[tagRequest setPredicate:tagPredicate];

NSError *error = nil;
NSArray* predicates = [self.managedObjectContext executeFetchRequest:tagRequest error:&error];


TagValues *tv = (TagValues*) [predicates objectAtIndex:0];
NSLog(tv.tagName); // it is nyt here...


NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tag IN %@", predicates];
[fetchRequest setPredicate:predicate];


// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController; 

-

Ответы [ 2 ]

29 голосов
/ 13 марта 2010

Ключ здесь "ЛЮБОЙ"

Пример из яблока:

NSPredicate *predicate = [NSPredicate predicateWithFormat:
    @"ANY employees.firstName like 'Matthew'"];

http://developer.apple.com/mac/library/documentation/cocoa/conceptual/CoreData/Articles/cdBindings.html

3 голосов
/ 31 мая 2009

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

Извините, я не могу вам помочь.

...