В Realm, если у меня есть настройка отношения linkingOjbects, как мне обрабатывать удаления и не оставаться с сиротами, особенно когда это обратная связь «многие ко многим»?
Используя примеры Человека и Собаки из Царства, предполагая, что Человек в этом случае является выгульщиком собак и что Собаку может выгуливать другой Человек в разные дни.
Таким образом, объект Dog назначается нескольким объектам Person. Каждый объект Person может видеть Dog. Предполагая следующую структуру объекта и данные
Person : Object {
dynamic var name:String = ""
let dogs = List<Dog>()
}
Dog : Object {
dynamic var name: String = ""
let walkers = LinkingObjects<fromType: Person.self, property:"dogs">
}
Person A
dogs = [Fido,Rover]
Person B
dogs = [Fido, Rover]
Человеку А больше не нужно ходить по Фидо, поэтому правильным подходом будет
personA.dogs.remove(objectAtIndex:idxOfFido)
Это обновит ссылку в personA, но также обновит ссылку в dog?
Во-вторых, если человеку Б тоже больше не нужно ходить по Фидо, я бы сделал
personB.dogs.remove(objectAtIndex:idxOfFido)
но оставит ли это тогда бесплодную ссылку на Фидо в моем царстве Собаки, поскольку по нему больше никто не ходит? Должен ли я тогда сделать проверку, такую как
if fido.walkers.count == 0 {
//remove Fido
}
fido
изpersons.dog
приведет к удалениюperson
изdog.walkers
. 2.) только потому, что собаку никто не выгуливает, не означает, что она мертва, поэтому да, вам нужно удалить собаку-сироту вручную. - person EpicPandaForce   schedule 02.05.2017