2016-05-25 16 views
0

私は外部APIを使用するアプリケーションを開発しており、oauth2を介した認証が必要です。 apiからの応答で私はアクセストークン、トークンを更新し、トークンが期限切れになる時間を得ます。時間が切れるまではすべてがうまくいきます。これまでのリクエストを送信する前に私は、アクセストークンが有効であるかどうかを確認しますユーザーのセッションを維持するための適切なアプローチ

getAppTokenFromRefreshedTokenが終了し
if ([[AppCredentials sharedCredentials]tokenIsValid]) { 
    BackEnd *backendPUT = [[BackEnd alloc]init]; 
    [backendPUT setDelegate:self]; 
    [backendPUT updateMenuInDiary:menuDietyDoUpdate forDate:[[DziennikDietaModel sharedDziennikDietaModel]getwybranaDate] mealID:[menuDietyDoUpdate objectForKey:@"id"]]; 
    monitor = [[UICustomLoadingMonitor alloc]initWithDefaultOptionsInView:[self view]]; 
    [monitor start]; 
}else{ 
    [[AppCredentials sharedCredentials] getAppTokenFromRefreshedToken]; 
} 

、方法userTokenDownloadedは、デリゲートを使用して呼び出されます。 質問は、if文の最初の部分では実行できなかった特定のコードにどうやって戻ることができますか?すべてが非同期なので、私は問題があります。

私のビューコントローラには、APIに異なるリクエストを送信するメソッドがいくつかあり、どちらを再度呼び出す必要があるかを区別する必要があります。

これには適切な方法はありますか?閉鎖?

+0

が、なぜこれだけを呼び出すことはありませ作品もう一度同じ方法ですか? –

+0

その場合は、私は単一のgetAppTokenFromRefreshedTokenの代わりに、私のView Controllerでapiリクエストと同じくらい多くのデリゲートメソッドを必要とします*それぞれ違うものを要求するビューコントローラの数 – repoguy

+0

OK ... "メソッドがいくつかあります" :) –

答えて

0

okです。ブロックとそれを解決:)誰かが私はそれをやった方法です答えを探していた場合には:

BackEnd *backEnd = [[BackEnd alloc]init]; 
[backEnd setDelegate:self]; 
if ([[AppCredentials sharedCredentials]tokenIsValid]) { 
     NSLog(@"TOKEN VALID NO BLOCKS"); 
     [backEnd updateMenuInDiary:menuDietyDoUpdate]; 
}else{ 
     NSLog(@"USING BLOCKS"); 
     [backEnd getAppTokenFromRefreshToken:refreshedToken withCompletionBlock:^{ 
      NSLog(@"ponowna proba z bloku"); 
      [backEnd updateMenuInDiary:menuDietyDoUpdate]; 
     }]; 
} 

は、あなたが新しいトークンを取得すると大きな:)

+0

良い、良い解決策。個人的に私は本当にPromiseKit(http://promisekit.org)があなたのコードをきれいに見えるようにしたいと思う;) –

+0

ありがとう:)そしてリンクのおかげで、それは非常に有望に見える – repoguy

関連する問題