2017-05-12 4 views
0

PFUserオブジェクト情報を同期的に取得しようとしています。しかし、私はフェッチを使用しようとしましたが、私は実装エラーを取得し続けます。たとえば、PFUser.currentUser()?objectForKey( "scoreNumber")が見つかりましたが、更新された値が取得されません。私はフェッチを使用してそれを見つけると言われましたが、フェッチ機能でobjectForKeyを実装できません。SwiftでPFUser objectForKeyを同期取得する方法

あなたはNSUserDefaultsのためのユーザーを保存するべきではない試み

var score: String! 
func retrieveScore(){ 
    guard let myUser = PFUser.currentUser() else { return } 
     do{ let data = try myUser.objectForKey("scoreNumber")?.fetch() 
     try scoreNumber = data! as! String 
    }catch{} 
} 

もう1

let userScore = PFUser.currentUser()?.objectForKey("scoreNumber") 
let userScore2 = userScore.fetch() 
+0

あなたはログインしているユーザーを持っていますか? –

+0

@ ZonilyJameはい、私はNSUserDefaultsでユーザーを保存します。 – Dups

答えて

1

の一部。 Parse SDKは、あなたのためにあなたのセッションを管理する良い仕事をしています。 [PFUser logout] `関数を呼び出す特定のログアウトボタンがあります。

したがって、フェッチは非同期操作です。つまり、別のスレッドで実行され、メインスレッドは次のコマンドの実行を続けます。したがって、フェッチは、バックグラウンドでオブジェクトを取得しますが、フェッチされていないオブジェクトから値にアクセスしようとしています。フェッチ呼び出しの結果を処理するブロック内からオブジェクトにアクセスする必要があります。

.fetch()と同じようにフェッチを呼び出すと、バックグラウンドで実行されますが、データがあるときやフェッチが失敗したときに警告は表示されません。これはすぐに必要となるデータを取得するための良い方法ではありません。

あなたが使用する必要がfetchInBackgroundWithBlock()

scoreNumber.fetchInBackgroundWithBlock() { 
    (scoreNumber: PFObject?, error: NSError?) -> Void in 
    if error == nil && scoreNumber != nil { 
    print(scoreNumber) 
    } else { 
    print(error) 
    } 
} 
関連する問題