I have model like this:
class Session: Object {
dynamic var token: NSData?
}
class SessionsPool: Object {
let sessions = List<Session>()
}
I can request all sessions (normally there is one or zero) with required token
let myToken: NSData = ...
let sessions = self.realm.objects(Session).filter("token == %@", myToken)
It works well.
And I would like to request all pools that has at least one session with required token. And I would like to "observe" this request for updates.
let myToken: NSData = ...
var pools = self.realm.objects(SessionsPool).filter("ANY sessions.token == %@", myToken)
pools.addNotificationBlock { (change) in
// Some code
}
But I can't do it due to error:
*** Terminating app due to uncaught exception 'Unsupported operator',
reason: 'NSData properties cannot be queried over an object link.'
So I can use predicates like token == *someNSData*
or like ANY sessions.stringToken == *someNSString*
, but not like ANY sessions.token == *someNSData*
.
What's wrong with NSData?
That particular query type hasn't been implemented yet: https://github.com/realm/realm-cocoa/issues/4222
However, your query can be refactored to something that Realm does support:
Replace this: ANY sessions.token == %@
With this: SUBQUERY(sessions, $session, $session.token == %@).@count > 0