Заполнить массив с помощью NSFetchRequest (CoreData)

Я создал проект для iPad, в котором используется шаблон Apple "Use CoreData".

Я настроил несколько вещей, например. названия объектов, но система осталась прежней.

Apple использует MasterViewController.h, который является UITableViewController, и DetailViewController.h, который является простым UIViewController. Как только вы выбрали один из объектов в UITableView в MasterViewController.h, он присваивает свои атрибуты DetailViewController.

Теперь проблема:

Я создал третий контроллер представления с именем ResultsViewController.h, который должен отображать все данные (атрибуты объектов).

Я хочу использовать один или несколько NSArray(s), которые должны содержать все мои данные (не только выбранные, а все. Поэтому, если вы создали 5 объектов, вы хотите иметь 5 раз NSArray).

(1) Как я могу получить значения xcoredatamodel, чтобы получить к ним доступ в ResultsViewController? Отправка запроса на выборку не сработала для меня?

(2) Как определить, сколько объектов я создал в своем UITableView (MasterViewController.h)?

Структура основных данных:

Просто, одна сущность, несколько атрибутов, вот и все!

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


person DAS    schedule 19.11.2011    source источник


Ответы (1)


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

Таким образом, предпочтительный способ - передать тот же NSManagedObjectContext в ResultsViewController и заставить его получать свои собственные данные по мере необходимости.

Однако, если вы действительно хотите получить все данные, это просто.

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityName"
      inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSError *error = nil;
NSArray *fetchedObjects = [self.managedObjectContext
      executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];

Массив fetchedObjects теперь содержит все ваши данные. Вы можете получить доступ к атрибутам обычным способом (например, с точечной нотацией или KVC).

person Mundi    schedule 19.11.2011
comment
Спасибо, я сам нашел подобное решение, что и стало причиной позднего принятия ответа. - person DAS; 21.11.2011