I have two RLMObjects:
class Timeline: RLMObject {
dynamic var entries = RLMArray(objectClassName: Entry.className())
dynamic var id = 0
dynamic var title = ""
dynamic var coverPhoto = ""
dynamic var body = ""
override class func primaryKey() -> String {
return "id"
}
}
class Entry: RLMObject {
dynamic var id :Int = 0
dynamic var timelineID :Int = 0
dynamic var name :String = ""
dynamic var caption :String = ""
dynamic var body :String = ""
dynamic var imageURL :String = ""
override class func primaryKey() -> String {
return "id"
}
}
As you can see, there is a To-Many relationship between the timeline and the record. The timeline has many entries.
selecting and assigning JSON to my graphs works very well, they are retrieved and installed using:
realm.beginWriteTransaction()
Timeline.createOrUpdateInDefaultRealmWithObject(timelineObject)
realm.commitWriteTransaction()
My problem arises when I try to get the records (which are a separate JSON request / response) for a given timeline and set them.
Getting and creating them like this works great:
realm.beginWriteTransaction()
Entry.createOrUpdateInDefaultRealmWithObject(entryObject)
realm.commitWriteTransaction()
But of course, this does not bind them to my Timeline object. So, I tried to get my Timeline object, and then adding an Entry object to my timeline by doing the following:
let timelineObject = Timeline(forPrimaryKey: id)
timelineObject.entries.addObject(entryObject)
(inside ofc transaction).
. , RLMException:
'RLMException', reason: 'Can't set primary key property 'id' to existing value 59.'
- , ? , RLMObject, , ?
segiddins, : createOrUpdate... ( timelineObject.entries.addObject(entryReturn).
let realm = RLMRealm.defaultRealm()
realm.beginWriteTransaction()
for entry in json["entries"] {
...
...
let entryReturn = Entry.createOrUpdateInDefaultRealmWithObject(entryObject)
timelineObject.entries.addObject(entryReturn)
}
realm.commitWriteTransaction()