2015-04-20 3 views
2

У меня есть два объекта в моей модели данных: Student < - >> GradeКак создать Core Data отношения в Swift

В Objective-C можно использовать следующую строку, чтобы связать отношения двух моих объектов :

[newStudent setValue:[NSSet setWithObject:newGrade] forKey:@"grades"]; 

Однако в Swift отсутствует NSSet. Как я могу выполнить одно и то же?

newStudent.setValue(??????, forKey: "grades") 
+0

Я оговорился, когда сказал «нет NSSet». Я имел в виду, что в Свифте не было родного набора. Однако, как отметил gregheo, теперь я вижу, что Swift 1.2 добавил новый тип «Set». Я бы хотел, чтобы решение использовало этот родной набор. –

+0

Вы использовали собственный Swift 'Set' как свойство '@NSManaged' успешно? Я не могу найти кого-либо, подтверждающего, что он работает правильно в Интернете. – AnthonyM

+1

В итоге я использовал подклассы, такие как Мартин Р. Когда Xcode автоматически генерируется подклассы, он определил такие атрибуты, как: '@NSManaged вар gradesRelationship: NSSet' Тогда в моем коде, я использовал Swift устанавливает что-то вроде этого: ' вар thisGradeSet: Set ? var thisGrade: GradeElement? ! thisGradeSet = thisStudent .gradesRelationship.filteredSetUsingPredicate (cellPredicate) вар thisScore: Int = thisGrade .score, как Int thisScore = 95 thisGrade .score = thisScore' –

ответ

3

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

Но это на самом деле проще назначить обратный (к-одному) отношения от Grade к Student:

newGrade.setValue(newStudent, forKey: "student") 

Это будет автоматически обновлять обратную связь, т.е. добавить на newGrade объект в grades имущество newStudent.

И то, что вы на самом деле нужно сделать, это создать NSMangedObject подклассы для ваших сущностей (в меню «Xcode-> Edit»), а затем использовать недвижимость аксессоров:

newGrade.student = newStudent 

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

7

Там уверены в Swift NSSet:

newStudent.setValue(NSSet(object: newGrade), forKey: "grades") 

В Xcode 6.3 и Swift 1.2, есть родной Set типа тоже. Обычно это мосты за NSSet до Set<NSObject>.

+0

Не могли бы вы показать мне, как это делается с помощью 'Set' в Swift 1.2? Спасибо! –

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