2017-04-20 8 views
0

私の問題は、データベース内のユーザーに関する何かが変更された場合(テスト中の手動変更)、クライアントサイドのキャッシュされたユーザーが更新されていないことです。私はfetch()か、バリアントの1つ(バックグラウンド、必要に応じて)を使用する必要があることを知っていますが、実際にはわかりません。ユーザーが有効かどうかを確認します。

AppDelegateの現在のコードは、ログイン画面を表示するかメインアプリに進むかを決定するためのコードです。

 // Decide which controller to go to 
     self.window = UIWindow.init(frame: UIScreen.main.bounds) 

     var sb: UIStoryboard? = nil 
     if (PFUser.current() != nil) && (PFUser.current()?.isAuthenticated)! { 
      sb = UIStoryboard(name: "Main", bundle: nil) 
     } else { 
      sb = UIStoryboard(name: "SetupUser", bundle: nil) 
     } 

     let vc = sb?.instantiateInitialViewController() 
     self.window?.rootViewController = vc 
     self.window?.makeKeyAndVisible() 

これは、ほとんどの時間動作しますが、ユーザーが更新またはフォーム削除された場合、DBアプリがオブジェクトを保存/更新エラーのため、後にクラッシュを継続します。

答えて

1

fetchInBackgroundを補完ブロックとして使用することをおすすめします。

PFUser.current()?.fetchInBackground(block : { (user, error) in 
      if let user = user { 
      //show Main 
      }else { 
      //showLogin 
      } 

    }) 

この方法で、ユーザーを取得した後でロジックを実行します。

+1

空白の画面だけでなくプレースホルダコントローラにコードを配置するのではなく、プレースホルダビューを使用する必要がありますか? – Minebomber

+0

はい、それはユーザーエクスペリエンスを向上させます。あなたが持っているLaunchScreen Viewと同じにすることができますが、フェッチが完了するまでユーザを「気を散らして」Main/Loginを続けるアニメーションを作ることもできます – unniverzal

+0

ありがとうございます。私はこれに似たアイデアを持っていましたが、実装方法を理解できませんでした。 – Minebomber

関連する問題