Это заставляло меня гать весь день.Основные отношения данных, NSPredicates и NSFetchedResultsController
У меня есть странная ошибка, я думаю, что я сузился до NSPredicate. У меня есть два объекта: List и Person. Список имеет отношение ко многим для лиц, называемых людьми, и у человека есть отношение ко многим для списков, называемых списками.
Перехожу к контроллеру tableview объекта List. Затем я хочу, чтобы этот контроллер таблицы отображал Лица, принадлежащие этому объекту списка. Я делаю это с NSFetchedResultsController.
При настройке NSFRC у меня есть следующий код (управление памятью опущено для ясности). Список в вопросе myList
:
// Create the request and set it's entity
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
// Create a predicate to get the persons that belong to this list
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList];
// Assign this predicate to the fetch request
[fetchRequest setPredicate:predicate];
// Define some descriptors
NSSortDescriptor *locationDescriptor = [[NSSortDescriptor alloc] initWithKey:@"location" ascending:YES];
NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:locationDescriptor, lastNameDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Create and initialize the fetch results controller.
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"location" cacheName:nil];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;
Я думаю, что проблема с этой линией (так как он исчезает, если я удалить его):
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList];
Что происходит, когда родительский вид проходит myList
к контроллер таблицы, симулятор просто висит. Никакой аварийный журнал в консоли или что-то еще. Это похоже на то, что просто нужно, чтобы AGES разобрался с NSFRC.
Это проблема с предикатом, который я использую?
Вы должны были отредактировать свое оригинальное сообщение, чтобы спросить об этом. – indragie