Область, связывающая объекты и удаления

В 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
 }

person TommyBs    schedule 02.05.2017    source источник
comment
AFAIK 1.) Связывающие объекты являются другой стороной отношений, поэтому, если вы обновляете их на одной стороне, другая сторона также обновляется. Удаление fido из persons.dog приведет к удалению person из dog.walkers. 2.) только потому, что собаку никто не выгуливает, не означает, что она мертва, поэтому да, вам нужно удалить собаку-сироту вручную.   -  person EpicPandaForce    schedule 02.05.2017
comment
@EpicPandaForce, это точно. Я бы предложил перенести ваш комментарий в ответ.   -  person bdash    schedule 02.05.2017
comment
Ааанд перешел к ответу :)   -  person EpicPandaForce    schedule 02.05.2017


Ответы (1)


1.) связывающие объекты являются «другой стороной отношений», поэтому, если вы обновляете их на одной стороне, другая сторона также обновляется. Удаление fido из persons.dog приведет к удалению person из dog.walkers.

2.) только потому, что собаку никто не выгуливает, не означает, что она мертва, поэтому да, вам нужно удалить собаку-сироту вручную.

person EpicPandaForce    schedule 02.05.2017