Soru Realm veritabanından tek bir nesneyi almak için doğru yol


Ben Swift ile birlikte Realm'i (0.92) kesinlikle seviyorum ama veri tabanından bir nesneyi okumakla ilgili bir sorum var. Amacım, bilinen bir benzersiz kimliğe sahip tek bir nesneyi (birincil anahtar olarak da bilinir) almaktır.

Tüm belgeler, daha sonra filtrelenen birden çok nesne için sorgulara yönlendirilmiş gibi görünür. Bu durumda, nesne kimliğini biliyorum ve benzersiz olduğu bilindiği için, onu doğrudan almak istiyorum.

Güncel yaklaşımım şu şekildedir:

Realm().objects(Book).filter("id == %@", prevBook.nextID).first

Bu çok ağır görünüyor. Önceki sürümlerden gelen belgeler, daha doğrudan bir yol olduğunu gösterir, ancak belgede bulamıyorum.

Şu anki yaklaşımımdaki sorun, aşağıdaki işlevde bir istisna ile çökmesidir:

public func filter(predicateFormat: String, _ args: CVarArgType...) -> Results<T>

İstisna gizemli olarak şu şekilde bildirilmiştir:

EXC_BAD_ACCESS (kod = 1, adres = 0xedf)

Herhangi bir öneri çok hoş geldiniz.

Bir soru sorgusunun tahmin edilmesi: prevBook.nextID'nin bilinen, iyi bir kimlik ile değiştirilmesi sorununun çözülmediğini doğruladım


32
2018-06-03 03:51


Menşei




Cevaplar:


Nesne (OfType: forPrimaryKey :) aradığınız şey: Realm().object(ofType: Book.self, forPrimaryKey: prevBook.nextId). Bundan daha basit bir yol yok filter().first Nesneyi birincil anahtardan başka bir şeyle aramanız gerekiyorsa.


56
2018-06-03 04:45



Teşekkürler, tam olarak aradığım şey. ObjectForPrimaryKey ile çağırmalıydım (Book.self, key: prevBook.nextID) - Andy
Java (Android) için eşdeğer nedir? - mm2001
... ve Javascript (Native Reactive) için de eşdeğer nedir? - Szczepan Hołyszewski
Bunu hala arayan herkes için, yöntemin object(ofType:forPrimaryKey:). Yukarıdaki örnek şimdi Realm().object(ofType: Book.self, forPrimaryKey: prevBook.nextId) - Salem