2017-08-25 6 views
1

J'ai essayé de ranger cela aussi longtemps que je pouvais, mais je suis vraiment coincé ici.CouchbaseLite Inverse Relation ne fonctionnant pas

Je suis en train d'utiliser Inverse Relationships

Fondamentalement, mon plan ressemble à ceci:

class Album 
var artist: artist? 

class Artist 
@NSManaged var albums:NSArray? 
class func albumsInverseRelation() -> String { return "artist" } 
class func albumsItemClass() -> AnyClass { return Album.self } 

Puis plus tard, je tente d'accéder à la propriété calculée, albums

bgdb.modelFactory?.registerClass("Album", forDocumentType: "Album") 
bgdb.modelFactory?.registerClass("Artist", forDocumentType: "Artist") 

if let artistID = artist?.document?.documentID, let fetchedArtist = try! Artist.fetchOne(field: "_id", operand: .Matches, value: artistID as AnyObject, database: bgdb) { 
    print(fetchedArtist.albums as! [Album]) 
} 

Mais fetchedArtist.albums retours un tableau vide!

Voilà pourquoi je suis confus, de débogage:

(lldb) po album?.artist?.document?.documentID 
▿ Optional<String> 
    - some : "-obO5dJTBF-xu4lzbWTM9yU" 


(lldb) po fetchedArtist.document?.documentID 
▿ Optional<String> 
- some : "-obO5dJTBF-xu4lzbWTM9yU" 

Comme il apparaît, il y a un album qui a un ID de l'artiste et je peux également correspondre à cet ID d'artiste avec un artiste existant

Pourtant, quand je demande à l'instance artist pour ses albums, il ne retourne pas l'album qui a le même artist ID

Suis-je manque quelque chose ici?

Répondre

1

Sweet baby ...

déchets Biggest de quelques heures, je l'ai eu dans un certain temps

dans mon code où je mettais la artist propriété

albumInstance.artist = artistInstance

il mettre le modèle, et tout semblait bien ...

Mais je n'appelais pas albumInstance.save() juste après ...

Donc, lors de l'exécution, je pouvais voir que albumInstance.artist avait l'ID droit de documents, mais sans save(), la relation inverse ne peut pas fonctionner.

ouais ... faire cela tout fixé ...