Заполните массив, используя NSFetchRequest (CoreData) - PullRequest
1 голос
/ 19 ноября 2011

Я создал проект для 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)?

Структура CoreData:

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

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

1 Ответ

9 голосов
/ 19 ноября 2011

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

Таким образом, предпочтительный способ - передать тот же 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).

...