0

authToken と authTokenSecret を使用して、ユーザーがすでに Twitter でログインしているかどうかを確認するにはどうすればよいですか?

このコードを使用していますが、ブロックの実行が完了するのを待たずに戻り値が返されます。セマフォなどを使用して、ブロックが実行され、関数がその値を返すまで待機する方法。

- (BOOL)isTwitterLogin
{
  __block BOOL value;


    NSString *oauthToken=[[NSUserDefaults standardUserDefaults] valueForKey:@"iNtellTwitterToken"];
    NSString *oauthTokenSecret=[[NSUserDefaults standardUserDefaults] valueForKey:@"iNtellTwitterTokenSecret"];


    STTwitterAPI *twitterAPI = [STTwitterAPI twitterAPIWithOAuthConsumerKey:kTwitterConsumerKey consumerSecret:kTwitterConsumerSecret oauthToken:oauthToken oauthTokenSecret:oauthTokenSecret];

    [twitterAPI verifyCredentialsWithSuccessBlock:^(NSString *username)
     {
         /// we still good to go
         value=1;
     } errorBlock:^(NSError *error)
     {
         /// token has expired. User needs to login again
         value=0;
     }];
    return value;
}

このメソッドを実行する最良の方法を探しています..

前もって感謝します!!!

4

1 に答える 1

1

「最善の方法」は、おそらく非同期動作を維持することです。

- (void)isTwitterLoginWithCompletionHandler:(void(^)(BOOL isTwitterLogin))completionHandler {

    NSString *oauthToken = [[NSUserDefaults standardUserDefaults] valueForKey:@"iNtellTwitterToken"];
    NSString *oauthTokenSecret = [[NSUserDefaults standardUserDefaults] valueForKey:@"iNtellTwitterTokenSecret"];

    if(oauthToken == nil || oauthTokenSecret == nil) {
        completionHandler(NO);
        return;
    }

    STTwitterAPI *twitterAPI = [STTwitterAPI twitterAPIWithOAuthConsumerKey:@""
                                                             consumerSecret:@""
                                                                 oauthToken:oauthToken
                                                           oauthTokenSecret:oauthTokenSecret];

    [twitterAPI verifyCredentialsWithSuccessBlock:^(NSString *username) {
        completionHandler(YES);
    } errorBlock:^(NSError *error) {
        completionHandler(NO);
    }];
}
于 2015-03-18T15:39:27.050 に答える