2016-12-03 4 views
0

На странице подробных сведений о товаре мое приложение позволяет пользователям пометить элемент из списка ранее созданных тегов. Элементы и теги являются сущностью в Core Data и связаны между собой многими отношениями.IOS/Core-Data: добавьте многие ко многим отношениям

Когда пользователь выбирает тег на странице элемент подробно, я пытаюсь создать отношения в Core Data следующим образом:

_selectedTag.item=self.item; // where self.item is the item being viewed. 

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

Соответственно, приведенная выше строка выдает предупреждение: Несовместимые типы указателей, назначающие NSSet из элементов, и когда вы запускаете приложение, он сбой.

Может кто-нибудь предложить правильный способ установить это отношение.

спасибо.

ответ

1

Когда вы настраиваете отношения «многие ко многим», CoreData генерирует методы, необходимые для добавления ссылок между двумя объектами, участвующими в создаваемых им файлах. Например, для отслеживания сущностей, которые я использую, у меня есть отношение «многие ко многим» с объектом «Контакт», которое называется includeContact в записи трека. Исходя из этого, CoreData генерирует метод следующих крючки в файл Track + CoreDataProperties.swift:

// MARK: Generated accessors for includesContact 
extension Track { 

    @objc(addIncludesContactObject:) 
    @NSManaged public func addToIncludesContact(_ value: Contact) 

    @objc(removeIncludesContactObject:) 
    @NSManaged public func removeFromIncludesContact(_ value: Contact) 

    @objc(addIncludesContact:) 
    @NSManaged public func addToIncludesContact(_ values: NSSet) 

    @objc(removeIncludesContact:) 
    @NSManaged public func removeFromIncludesContact(_ values: NSSet) 

} 

Он генерирует обратные крючки метода в файл для контактного лица.

Когда мне нужно добавить один контакт в includeContact, я использую addIncludesContact с единственным аргументом Contact. Кроме того, я использую версию NSSet для добавления отношений для нескольких контактов.

Например, чтобы добавить один контакт, myContact, на новый трек под названием newRecord, это работает следующим образом:

newRecord.addToIncludesContact(myContact) 

Для нескольких контактов, сохраненных в selectedContacts массива, он идет следующим образом:

newRecord.addToIncludesContact(selectedContacts as NSSet) 

Надежда, что помогает ...

+0

К сожалению, я не знаю Swift. Знаете ли вы, есть ли какой-либо эквивалент в Objective-C? – user6631314

+0

Хорошо. Найденные объектно-эквивалентные аксессоры, но то, что его заработало, заключалось в том, что выбранный таг, который был объектом в массиве в NSSet, следующим образом. _selectedTagInSet = [NSSet setWithObjects: _selectedTag, nil]; как только я это сделал, основные данные позволили мне установить связь с self.item.tag = _selectedTagInSet; . – user6631314

+0

Рад, что это сработало - извините, никогда не поднимал ObjC –

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