Использование CoreData Отношения - PullRequest
2 голосов
/ 25 марта 2012

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

Проблема в моем приложении заставила меня задуматься, у меня есть две сущности, TableInfo и PersonInfo.

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

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

Я подумал, что здесь могут вступить в отношения, но я никогда не работал с ними раньше, поэтому мне сложно понять, куда идти.

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

Спасибо!

Ответы [ 2 ]

3 голосов
/ 25 марта 2012

Это хорошая ситуация, когда вы будете использовать отношения Core Data.

Обычная документация Apple (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html) даст вам хорошее представление о том, как она работает.

Короче говоря, для отношений вы можете указать правило удаления.В вашем случае вы, вероятно, выбрали бы «Обнулить».Это означает, что если вы удалите таблицу, свойство table вашего Person станет нулевым, указывая на то, что ваше лицо больше не сидит на столе.

Edit: Вы также можете указать «Cascade», который будет удалятьчеловек вместе со столом (довольно бессмысленная, но слегка забавная мысль).Или вы можете указать «Запретить», который прервет удаление, если хотя бы один человек все еще сидит за столом.

Пример:

Предположим, у вас есть две сущности, «TableInfo» и «PersonInfo».«PersonInfo» имеет отношение , называемое «таблицей», «TableInfo» имеет отношение , называемое «персоной».«table» - это отношение «один к одному» с «TableInfo» в качестве цели."people" - это отношение "многие-многие", а "PersonInfo" - это цель.

Теперь установите "Обратное отношение" "персоны" в "таблицу".«Обратные отношения» в «таблице» будут автоматически установлены на «персоны».

Если вы позволите CoreData генерировать подклассы вашей модели (вы должны!), Вы получите такой класс:

@interface TableInfo : NSManagedObject

@property (nonatomic, retain) NSSet *persons;
@end

@interface TableInfo (CoreDataGeneratedAccessors)

- (void)addPersonsObject:(PersonInfo *)value;
- (void)removePersonsObject:(PersonInfo *)value;
- (void)addPersons:(NSSet *)values;
- (void)removePersons:(NSSet *)values;

Как видите, CoreData автоматически создает подходящие средства доступа для вас.Просто используйте их.

Теперь вы можете делать следующее:

TableInfo* myTable = [NSEntityDescription insertNewObjectForEntityForName:@"TableInfo" inManagedObjectContext:self.managedObjectContext];

PersonInfo* myPerson = [NSEntityDescription insertNewObjectForEntityForName:@"PersonInfo" inManagedObjectContext:self.managedObjectContext];

[myTable addPersonsObject:myPerson];
NSLog(@"%@", myPerson.table); // will be your TableInfo object "myTable"

Короче, пожалуйста, прочитайте документацию, которую я привел выше, там и в Интернете есть множество примеров.Не стесняйтесь задавать вопросы по SO, но для «основных» потребностей учебники в Интернете будут более полными и полезными.

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

Взгляните на лекцию 12 и пример «ставни», как настроить отношения. Он использовал отношение фотографа к фотографиям, такое же, как отношение вашего стола к людям. Лекция может быть доступна на iTunesU под CS193P осенью или весной 2010-11.

Слайды и пример доступны по этой ссылке. http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-fall

...