We have a use case where we need to filter on a List of Embedded objects before they are stored in Realm. Doing this throws an error
This method may only be called on RLMArray instances retrieved from an RLMRealm
Given a PersonClass object and an EmbeddedAddress embedded object
class PersonClass: Object {
@objc dynamic var name = ""
let addressList = List<EmbeddedAddress>()
}
class EmbeddedAddress: EmbeddedObject {
@objc dynamic var name = ""
}
here’s the code that crashes
let person = PersonClass()
person.name = "Ted"
let a = EmbeddedAddress()
a.name = "a"
let b = EmbeddedAddress()
b.name = "b"
let c = EmbeddedAddress()
c.name = "c"
person.addressList.append(objectsIn: [a, b, c])
for addr in person.addressList {
print(addr.name) // prints a, b, and c
}
let result = person.addressList.filter("name == 'b'") //CRASH
The use case is a user creates a person and as addresses are being added, we want to ensure they are unique before saving so we need to filter to see if the entered address was already entered.