2016-03-03 87 views
1

我有一個框架和一個項目。我的框架負責Web服務。如何通過延遲從方法返回值?

從項目用戶插入用戶名和密碼。然後通過在框架內調用sendLogin方法來傳遞這些參數。

內部框架需要一段時間來檢查和驗證用戶名和密碼。如果用戶名和密碼正確,它將從服務器獲得一個令牌號碼。

直到這裏一切工作正常。但我想知道如何將此令牌發送回主程序?

我試過完成方法,但是失敗了。下面是定義:

項目:

- (IBAction)bankLoginPressed:(id)sender 
{ 
    [registerUser sendLogin:^(NSInteger *accessCode){ 

     NSLog(@"access code == %tu ",accessCode); 

    }]; 
} 

內部框架

typedef void (^HttpCompletionBlock) (NSInteger *); 

-(void) sendLogin :(HttpCompletionBlock)completionHandler 
{ 
    NSString *string = @"https://myserver/customer_authentication"; 
    NSDictionary *parameters = @{@"member_id": @"1234", @"access_code": @"password", @"device_id":@"874627864"}; 

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
    [manager POST:string parameters:parameters progress:nil success:^(NSURLSessionTask *task, id responseObject) { 

     NSLog(@"JSON: %@", responseObject); 
     if (responseObject[@"secret_token"]) 
     { 

      NSLog(@"Secret is= %@",responseObject[@"secret_token"]); 
      //Here I needd to send back token number???? 

     } 
    } 
      failure:^(NSURLSessionTask *operation, NSError *error) 
    { 
     NSLog(@"Error: %@", error); 
    }]; 
} 
+2

如果你知道如何代表工作,這是使用一個 – Fonix

+0

正確@Fonix的理想場所。代表或NSNotificationCenter應該可以正常工作。 – TechBee

回答

2
typedef void (^HttpCompletionBlock)  (NSString *token, NSError *error); 

-(void) sendLogin :(HttpCompletionBlock)completionHandler 
{ 
    NSString *string = @"https://myserver/customer_authentication"; 
    NSDictionary *parameters = @{@"member_id": @"1234", @"access_code": @"password", @"device_id":@"874627864"}; 

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
    [manager POST:string parameters:parameters progress:nil success:^(NSURLSessionTask *task, id responseObject) { 

    NSLog(@"JSON: %@", responseObject); 
    if (responseObject[@"secret_token"]) 
    { 

     NSLog(@"Secret is= %@",responseObject[@"secret_token"]); 
     //Here I needd to send back token number???? 
     return completionHandler(responseObject[@"secret_token"],nil); 

     } 
    } 
     failure:^(NSURLSessionTask *operation, NSError *error) 
     { 
      NSLog(@"Error: %@", error); 
      return completionHandler(nil,error); 
     }]; 
} 

- (IBAction)bankLoginPressed:(id)sender 
{ 
    [registerUser sendLogin:^(NSString *token, NSError *error){ 
     if(error == nil) 
     { 
      NSLog(@"access code == %@ ",token); 
     } 
     else 
     {  
      NSLog(@"Error == %@ ",error); 
     } 

    }]; 
} 
+0

我不是爲什麼有人投了票,但它爲我工作! – Bernard

+0

但我認爲如果(error!= nil)必須變成if(error == nil)的權利? – Bernard

+0

@Bernard:你說得對。回答更新謝謝:) – Monish