0

ユーザーがログインしASIHTTPRequestているかどうかを確認し、ログインが成功したときにブール値を返そうとしています

問題:ブール値を要求すると、常に 0 が返され、数秒後 ASIHTTPRequestに要求が終了し、ブール値が更新されます。

私が欲しいのは、すべてのリクエストが終了した後にブール値を取得することです。適切な方法は、ブール関数を記述して、asihhtp リクエストの結果を取得することだと思いますか?

シングルトンで:

@interface CloudConnection : NSObject
{
    BOOL isUserLoggedIN;
}
@property BOOL isUserLoggedIN;
+ (CloudConnection  *)sharedInstance;
@end

+ (CloudConnection *)sharedInstance
{
    static CloudConnection *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[CloudConnection alloc] init];
        // Do any other initialisation stuff here

    });
    return sharedInstance;
}

- (id)init {
    if (self = [super init]) {
        //send login request
        [self sendLoginRequest];
    }
    return self;
}
-(void) sendLoginRequest{ .....}
- (void)requestFinished:(ASIHTTPRequest *)request
{ else if (request.responseStatusCode == 202) {
        //parse  json data
        NSLog(@"Login Succesfull");
        _isUserLoggedIN=YES;
    }
}
- (void)requestFailed:(ASIHTTPRequest *)request{}

VC で:

CloudConnection *sharedInstance=[CloudConnection  sharedInstance];
 NSLog(@"is logged in init %hhd",sharedInstance.isUserLoggedIN);
[self performSelector:@selector( checkLoginAfterFiveSeconds) withObject:nil afterDelay:5.0];

-(void) checkLoginAfterFiveSeconds
{

    CloudConnection *sharedInstance=[CloudConnection  sharedInstance];
    NSLog(@"is logged in init %hhd",sharedInstance.isUserLoggedIN);
}

NSLOG:

is logged in init 0
Login Succesfull`
is logged in init 1 //after 5 secs
4

2 に答える 2

0

はい、その通りです:)リクエスト完了ブロックで、次のメソッドを呼び出します。

[self loginResult:result];

-(void)loginResult:(BOOL)result
{
    if(result == TRUE)
    {
        NSLog(@"Login successfully now call any method or do what ever you want");
    }
    else
    {
        NSLog(@"Login unsuccessfull");
    }
}
于 2013-03-10T10:50:40.423 に答える
0

あなたが提案したことをすると、呼び出し元のスレッドがブロックされます。そして、特にメイン/ uiスレッドではなく、ネットワークトラフィックを待機するスレッドを望んでいません

void 関数にして、completedHandler を呼び出すか、結果を直接計算できるようになったら NSNotification を送信します。:)

于 2013-03-04T18:12:06.263 に答える