2015-12-23 2 views
2

Привет Я играл с Realm, и я пытаюсь получить и выход:Backlinking Realm

Fido has 1 owners (["John"]) 
Rex has 2 owners (["Mary","Bob"]) 

Хотя я продолжаю получать этот вывод:

Fido has 1 owners (["John"]) 
Rex has 1 owners (["Mary"]) 
Rex has 1 owners (["Bob"]) 

Вот код Я использую:

// this in the app delegate 
try! realm.write { 
      realm.create(Person.self, value: ["John", [["Fido", 1]]]) 
      realm.create(Person.self, value: ["Mary", [["Rex", 2]]]) 
      realm.create(Person.self, value: ["Bob", [["Rex", 2]]]) 
     } 

     // Log all dogs and their owners using the "owners" inverse relationship 
     let allDogs = realm.objects(Dog) 
     for dog in allDogs { 
      let ownerNames = dog.owners.map { $0.name } 
      print("\(dog.name) has \(ownerNames.count) owners (\(ownerNames))") 
     } 


class Dog: Object { 
    dynamic var name = "" 
    dynamic var age = 0 
    var owners: [Person] { 
     // Realm doesn't persist this property because it only has a getter defined 
     // Define "owners" as the inverse relationship to Person.dogs 
     return linkingObjects(Person.self, forProperty: "dogs") 
    } 
} 

class Person: Object { 
    dynamic var name = "" 
    let dogs = List<Dog>() 
} 

Благодарим вас, если вы можете помочь.

ответ

1

От внешнего вида вы создаете полностью отдельную копию Rex, каждый раз, когда вы добавляете нового владельца в базу данных, а не повторно используете тот же самый.

Возможно, было бы лучше создать объекты Dog отдельно, а затем ссылаться на эти объекты непосредственно при создании объектов Person.

+0

Хорошо, я понимаю, что вы имеете в виду. Мне придется поиграть и понять, как это сделать. Благодарю. –

+0

Не беспокойтесь! Да, в этом случае, нужно просто не создавать собак вместе с владельцем. Позвольте мне знать, если у вас есть еще вопросы! Если нет, не стесняйтесь отмечать этот вопрос в ответ. ;) – TiM

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