CoreData: проблема отображения отношений «один ко многим» - PullRequest
0 голосов
/ 30 марта 2012

Я понимаю, что это довольно долго, но в настоящее время я работаю над своим первым проектом CoreData, и, несмотря на чтение каждого ресурса, я могу найти, что он еще не все утонул.пока я сохранил все и сохранил все в порядке, однако я не могу заставить отношения работать правильно.У меня есть табличное представление, которое отображает категории Exersize, который перемещается в таблицу, отображающую связанные с ней размеры Exersize (один ко многим).

(попытался опубликовать изображение, но у меня пока недостаточно точек повторения), ноdataModel выглядит следующим образом

ExersizeCategory <--- >> Exersize

Из всего, что я прочитал, я считаю, что мне может понадобиться использовать предикат для фильтрации результатов, но яЯ не совсем понимаю, как это работает на самом деле и выдерживает или нет, я даже на самом деле даже создаю и сохраняю категории Exersize и Exersizes соответственно для того, чтобы отношения работали в первую очередь.

Вот как я создаю и сохраняю (также присваиваю его имя записи в текстовом поле)

ExersizeCategory *exersizeCategory = [NSEntityDescription insertNewObjectForEntityForName:@"ExersizeCategory"
                                                                       inManagedObjectContext:self.managedObjectContext];
    exersizeCategory.name = self.textField.text;

    [self.managedObjectContext save:nil];  // write to database

А вот код для эксермеров (в значительной степени идентичный)

// Create a new instance of the entity 
    exersize = [NSEntityDescription insertNewObjectForEntityForName:@"Exersize"
                                             inManagedObjectContext:self.managedObjectContext];

    exersize.name = self.textField.text;

    [self.managedObjectContext save:nil];  // write to database

Хотя это похоже на работу при создании объектов, и я вижу их на табличных представлениях, которые мне еще предстоит реализовать coreDataGeneratedAccessors, как и где они вписываются в рисунок?

@interface ExersizeCategory (CoreDataGeneratedAccessors)
  • (void) addExersizesObject: (Exersize *) значение;
  • (void) removeExersizesObject: (Exersize *) значение;
  • (void) addExersizes: (NSSet *) значения;
  • (void) removeExersizes: (NSSet *) значения;

я должен упомянуть, что я использую класс CoreDataTableViewController, который, кажется, уменьшает объем кода, который вам нужно написать для выборки (который я нашел в учебнике, который я изучал на сайте www.timroadly.com), созданном Стэнфордским университетом.примечание: было бы лучше не разбивать это на подклассы и просто использовать стандартный способ, как я заметил в .h, в нем говорится, что его авторское право принадлежит Стэнфорду, поэтому я не уверен, что смогу использовать его в приложении, которое хочу выпустить?

Вот как я в данный момент выбираю для отображения Экзерсайзес

- (void)setupFetchedResultsController {
// 1 - Decide what Entity you want
NSString *entityName = @"Exersize"; // Put your entity name here
NSLog(@"Setting up a Fetched Results Controller for the Entity named %@", entityName);

// 2 - Request that Entity
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName];

// 3 - Filter it if you want

//currently unsure about this!
//request.predicate = [NSPredicate predicateWithFormat:@""];

// 4 - Sort it if you want
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name"
                                                                                 ascending:YES
                                                                                  selector:@selector(localizedCaseInsensitiveCompare:)]];
// 5 - Fetch it
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                    managedObjectContext:self.managedObjectContext
                                                                      sectionNameKeyPath:nil
                                                                               cacheName:nil];
[self performFetch];

}

Я знаю, что пропустил ключевые моменты в реализации этого, но я просто неуверен, что и где.Я изучал основные данные всего несколько дней, так что учиться было довольно здорово!

Спасибо всем, кто может пролить свет / ответить / или даже подтолкнуть меня в правильном направлении!

1 Ответ

0 голосов
/ 31 марта 2012

f.perdition,

Вы пишете:

Хотя это похоже на работу при создании объектов, и я вижу их на столах у меня еще не реализовать coreDataGeneratedAccessors, как и где они вписываются в картина

Базовые данные динамически создают реализации этих методов. Заголовки для вашего удобства и проверки типов соответствия.

Вот простой предикат для поиска имени упражнения в вашей сущности exersize:

NSPredicate *p = [NSPredicate predicateWithFormat: @"%K == %@", @"name", @"Push Up"];

Andrew

P.S. Вы можете исправить свое написание слова упражнение.

...