2017-03-13 5 views
0

私はRealmを初めて利用しています。最初のものは最初、自分のレルムのオブジェクトがそうのようになります。Swift:Realmを使用したレコードのフィルタリング

func RegisterToDatabase(Valcode:String, IsConfirmed:Bool = false){ 

    let loRegistrationInf = RegistrationInf() 

    let realm = try! Realm() 

    if IsConfirmed { 
     let loReg = realm.objects(RegistrationInf.self).filter("RValCode == \(Valcode)").first 
     try! realm.write { 
      loReg?.RIsConfirmed = IsConfirmed 
     } 
     self.loIsConfirmed = IsConfirmed 
    } 
    else { 
     loRegistrationInf.RValCode = Valcode 
     loRegistrationInf.RIsConfirmed = IsConfirmed 

     try! realm.write { 
      realm.add(loRegistrationInf) 
     } 
    } 
} 

class RegistrationInf: Object { 
    dynamic var RValCode = "" 
    dynamic var RIsConfirmed = false 
} 

私は、以下の機能を使用してレルムデータベースに挿入する検証コードを含むJSONデータを返すPHPスクリプトを持っています

その後、ユーザーがコードを含むSMSを受信すると、ユーザーはコードを入力して確認し、上記の関数が再度呼び出されます。このときには、 の2番目のパラメーターの値がtrueです。

コードは次の行に来るとき:

let loReg = realm.objects(RegistrationInf.self).filter("RValCode == \(Valcode)").first 

私は私に言った例外を取得:キャッチされない例外により「無効な値」にアプリを終了

、理由:「プロパティ」RValCode 'は' RegistrationInf 'タイプのオブジェクト内のリンクではありません

ここで私は何が欠けていますか?

+0

「NSPredicate」のオブジェクトを使用する必要があるときに、 'filter(_ :)'に渡される述語文字列でSwiftの文字列補間構文( '\(variable)置換構文( '%@')。正しい構文( 'filter(" RValCode ==%@ "、Valcode)')を使用すると、より良い結果が得られますか? – bdash

+0

そうでした!おかげさまで、訂正してくれてありがとう、次回は悪い英語のために申し訳なく思っています。 – Licentia

答えて

2

フィルタは.filter("RValCode == %@", Valcode)である必要があります。 Swiftの文字列補間を使用すると、引用符で囲まれていない文字列(NSPredicate形式の構文を使用する場合は不要)によって無効なクエリが生成されます。

関連する問題