Базовые отношения данных, NSPredicates и NSFetchedResultsController - PullRequest
0 голосов
/ 05 июля 2010

Это сводило меня с ума весь день.

У меня странная ошибка, которую, я думаю, я сузил до NSP-предиката. У меня есть две сущности: список и человек. List имеет отношение ко многим к Person, называемым персонами, а Person имеет отношение ко многим к List, называемым списками.

Я передаю своему контроллеру таблиц объект 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 контроллеру табличного представления, симулятор просто зависает. Нет аварийного входа в консоль или что-нибудь. Это похоже на то, как будто для того, чтобы разобраться с NSFRC, нужны ВОЗРАСТЫ.

Это проблема с предикатом, который я использую?

Ответы [ 3 ]

1 голос
/ 05 июля 2010

Вы правы, вы можете просто использовать myList.persons, NSFetchedResultsController не требуется в этой ситуации.

1 голос
/ 05 июля 2010

Вам нужно использовать NSFetchedResultsController, когда вы можете получить Person s из списка, переданного в tableViewController?

NSSet *people = myList.persons;
0 голосов
/ 05 июля 2010

Спасибо за предложения по использованию NSSet.После нескольких часов отслеживания ошибок я понял, что проблема заключается в моем методе cellForIndexPath табличного представления (так, не связанном с NSFRC).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...