Основные данные с несколькими viewControllers - PullRequest
1 голос
/ 16 января 2012

У меня много трудностей с получением основных данных для работы в моем приложении. Мне совершенно комфортно работать с основными данными в контроллере табличного представления и даже с основными данными в одном приложении представления. Однако я не могу заставить мою программу нормально работать с несколькими контроллерами представления.

Я прочитал основную книгу данных Zarra, купил основные данные для iOS и прошел перечисленные проекты, но каждый из них используется в контроллере TableView. за исключением приложения фигур в основных данных для iOS.

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

То, что я хотел бы сделать, это иметь кнопки на первой (вместо ячеек табличного представления), которые будут переходить к следующему viewController. На втором контроллере представления я хотел бы, чтобы эта информация заполнялась информацией из набора первого объекта,

поэтому у меня пока что-то вроде этого, где первая сущность:

Дом

  • houseName (атрибут)
  • жильцы (отношения)

Человек

  • personName (атрибут)
  • домашнее хозяйство (отношения)

жителей <- >> домашнее хозяйство (один ко многим)

{
...
int i = //house selected on previous view controller;
NSManagedObject *people = [[self sortOccupants] objectAtIndex:i];
textField01.text = [NSString stringWithFormat:@"%@",[[people valueForKey:@"personName"]description]];
}

сортировка жителей выглядит так:

-(NSArray *)sortOccupants
{
NSSortDescriptor *sortPeopleInHouse = [[NSSortDescriptor alloc] initWithKey:@"personName" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortPeopleInHouse, nil];
return [[(NSSet *)[house valueForKey:@"occupants"] allObjects] sortedArrayUsingDescriptors:sortDescriptors];
}

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

Спасибо

Ответы [ 2 ]

1 голос
/ 16 января 2012

Способ, которым я бы подошел к этому, состоит в том, чтобы генерировать подклассы NSManagedObject для ваших сущностей (делает его намного более читабельным и безопасным для типов).

Затем я бы создал новый метод init во втором контроллере представления. initWithHouse: (Дом *) дом или что-то:

@property (nonatomic, strong) House  * currentHouse;
@property (nonatomic, strong) NSArray * sortedOccupants; // Array of People objects

-(id) initWithHouse:(House *)house
{
  if (self = [super init])
  {
      // Managed Object Context available from [currentHouse managedObjectContext]
      currentHouse = house;
      sortedOccupants = [self sortOccupants:house.occupants];
  }
  return self;
}

-(NSArray *)sortOccupants: (NSSet *)occupants
{
    NSSortDescriptor *sortPeopleInHouse = [[NSSortDescriptor alloc] initWithKey:@"personName" ascending:YES];
    NSArray *sortDescriptors = [NSArray arrayWithObjects:sortPeopleInHouse, nil];

    return [occupants allObjects] sortedArrayUsingDescriptors:sortDescriptors];
}

Надеюсь, это поможет.

1 голос
/ 16 января 2012

Может быть, ключ в том, что каждый контроллер представления должен иметь

@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;

в своем заголовке.

Перед тем, как нажать контроллер представления, вы задаете ему контекст управляемого объекта.В этом новом контроллере представления вы можете использовать свои типичные методы поиска и сохранения контекста.

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

...