2015-08-30 6 views
2

Так у меня есть следующие объекты:Основные характеристики: Установка NSSet Swift

class Person: NSManagedObject { 
    @NSManaged var name: String 
    @NSManaged var dogs: NSSet 
} 

class Dog: NSManagedObject { 
    @NSManaged var name: String 
    @NSManaged var owner: NSManagedObject 
} 

И я думаю, что я, должно быть, пытался как пять различных способов установки собак NSSet и владелец NSManagedObject, все не повезло.

self.mutableSetValueForKey("dogs").addObject(newDog) 

разваливается и бросить "Нагрузочный приложение из-за неперехваченного исключением 'NSInvalidArgumentException', причина:" *** - [NSSet intersectsSet]: установить аргумент не является NSSet"

Я пытался как из этих вариантов:

var newDogs = [newDog] 
var setOfDogs = NSSet(array: newDogs) as Set<NSObject>  
self.dogs.setByAddingObjectsFromSet(setOfDogs) 
self.dogs.setByAddingObjectsFromArray(newDogs) 

ни один из которых забрасывали и исключение, но self.dogs пуст после использования или/и тех.

Кроме того, при установке dog.owner, как мне это сделать? Я знаю, что есть методы, которые являются dog.owner.setValue (Value, Key), но я не совсем уверен, что значение и ключ ссылаются, и документация не была очень полезной.

Я знаю, что здесь есть похожие вопросы, но все они, кажется, находятся в Obj-C, и у меня возникают проблемы с ними. Любые советы оценили, спасибо!

ответ

2

Во-первых, если вы подкласс NSManagedObject, вы должны использовать подклассы:

@NSManaged var owner : Person 

Во-вторых, вам не придется заботиться о сложности установки NSSet в один-ко-многим. Вместо этого просто установите отношение «один».

dog.owner = person 

Всё.

И, наконец, для дальнейшего использования, вот как вы устанавливаете/изменяете NSSet. Это необходимо, если у вас есть отношения «многие ко многим».

let items = self.mutableSetValueForKey("dogs") 
items.addObject(newDog) 

Вы можете упростить это, добавив удобные методы для ваших NSManagedObject подклассов.

+0

Почему бы не «mutableCopy»? просто чтобы избежать возможных ошибок компиляции – Gabox

+0

Вы не хотите копировать. Вы не должны пытаться обмануть компилятор, но пусть это поможет вам написать надежный, эффективный и экономичный код. – Mundi

+0

Это сбой моего приложения: [_SwiftValue entity]: непризнанный селектор, отправленный в экземпляр –

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