2013-10-15 6 views
0

Попытка действительно тяжело получить мою голову вокруг основных данных и отношений. Моя текущая настройка сущность заключается в следующем:Начальные основные данные и отношения

< профили - >> События

у меня все работает (я могу добавить, изменять и удалять профили и события прямо сейчас, я просто не имеют отношения соединения) , Поэтому, основываясь на этом, я должен просто установить связь «соединение» один раз, верно? Когда я добавляю событие, ему просто нужно знать, с каким профилем будет ассоциироваться, а затем любые изменения, удаления и т. Д. Будут обрабатываться основными данными?

Если я нахожусь на правильном пути, где я могу обновить профиль при добавлении события?

Я спасаю события на основе делегирования от контроллера табличного ...

FROM THE ADD EVENT VIEW CONTROLLER 


AddEventViewController.m 

[self.currentEvent setEventdesc:eventDescField.text] 
[self.delegate addEventViewControllerDidSave]; 



FROM THE EVENT TABLE VIEW CONTROLLER 

EventTableViewController.m 

-(void) addEventViewControllerDidSave { 
    NSError *error = nil; 
    NSManagedObjectContext *context = self.managedObjectContext; 

    if (![context save:&error]) { 
     NSLog(@"Error %@", error); 
    } 

    [self dismissViewControllerAnimated:YES completion: NIL]; 
} 

ответ

1

Во-первых, я думаю, вы не имеете отношения в основных данных. Затем вам необходимо добавить отношения между ними:

  1. Создать один отношения с именем eventRelation в профиле с назначения События
  2. Сделайте то же самое для профилей (profileRelation) с целевым профилем и установить его инверсию. Инверсом является имя свойства в другом объекте, в этом случае обратное значение eventRelation в профиле является profileRelation.

Теперь вам необходимо обновить файлы, в которых ваши модели добавят эти свойства. Например, in Profiles.m add: @property (неатомный, сохранить) События * eventRelation.

Наконец, в коде, если вы хотите сохранить отношения события вам нужно будет сделать:

Profile * newProfile = (Profiles *)[NSEntityDescription insertNewObjectForEntityForName:@"Profile" inManagedObjectContext:self.managedObjectContext]; 

Events * addEvent = (Events *)[NSEntityDescription insertNewObjectForEntityForName:@"Events" inManagedObjectContext:self.managedObjectContext]; 

//Set event and profile data 

newProfile.eventRelation = addEvent; 

//And save changes 
[self.managedObjectContext save:&error]; 

Теперь, каждый раз, когда вы будете получать объект, вы будете в состоянии получить доступ к другому объект только с помощью:

//fetch data into self.profiles 
profiles.eventRelation 

Обновлены Например:

Допустим, у вас есть профиль Entity с атрибутами: имя, фамилия и отношения eventRelation и события Entity с АТТ имя ребра, дату и профиль отношений. Затем, если вы хотите добавить дату на мероприятие, вы можете выбрать событие, которое хотите и сделать: События * событие ... извлечение; event.date = [NSDate ...]

Другой вариант: вы выбрали профиль и хотите изменить имя профиля и дату одного события (у вас уже есть событие в этом профиле), вы do:

Profile * profile ... fetch it 
profile.name = @"asd" 
profile.eventRelation.date = [NSDate ...]; 

После этого вам просто нужно его сохранить.

+0

Итак, я думаю, что, возможно, я думаю об этом назад. Я исхожу из традиционного реляционного фона db. Я пытаюсь посмотреть на ваш пример выше ... поэтому вместо того, чтобы сообщать сущности Event, к которой относится этот профиль, я добавляю объект Events к объекту Profile? – Mark

+0

Вы правы. Создайте событие и добавьте его в профиль. Затем, если вы сделаете выборку для профиля, вы можете получить доступ к событию из этого свойства.Это один и тот же случай для события: выборка события позволяет вам получить доступ к их профилю – Alex

+0

Итак, в приведенном выше примере, как я могу добавить say, eventdate (который есть в объекте Events)? Я так безнадежно запутался – Mark

Смежные вопросы