iPhone SDK Core Data: Выбрать все объекты с нулевыми отношениями?

У меня есть базовый проект данных, который имеет Книги и Авторов. В модели данных Авторы имеют к - многие, отношения к Книгам и Книгам имеют отношения 1-1 с Авторами. Я пытаюсь вытянуть все Книги, которые не имеют Автора. Неважно, как я пробую его, никакие результаты не возвращаются. В моем предикате я также попробовал = NIL, == ноль, == NIL. Любые предложения ценились бы.

// fetch all books without authors
- (NSMutableArray *)fetchOrphanedBooks {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Book" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:20];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"author == nil"];
[fetchRequest setPredicate:predicate];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

NSString *sectionKey = @"name";//nil;
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext
                                                                                                  sectionNameKeyPath:sectionKey cacheName:nil];
BOOL success = [aFetchedResultsController performFetch:nil];
NSMutableArray *orphans = nil;

// this is always 0
NSLog(@"Orphans found: %i", aFetchedResultsController.fetchedObjects.count);

if (aFetchedResultsController.fetchedObjects.count > 0)
{
   orphans = [[NSMutableArray alloc] init];
   for (Book *book in aFetchedResultsController.fetchedObjects)
   {
      if (book.author == nil)
      {
         [orphans addObject:book];
      }
   }

}

[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];

return [orphans autorelease];

}
8
задан TechZen 30 April 2010 в 19:31
поделиться

2 ответа

Попробуйте вместо этого использовать нулевой счетчик:

NSPrdicate *predicate = [NSPredicate predicateWithFormat:@"author == nil || author.@count =0"];
25
ответ дан 5 December 2019 в 06:37
поделиться

Попробуйте:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"author == nil"];

«==» является логическим равенством. Просто "=" - это присвоение.

Я все время делаю эту ошибку.

Редактировать:

Хорошо, я как-то пропустил в OP, что он сказал, что уже пробовал это. Извините.

0
ответ дан 5 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: