2015-12-30 45 views
0

這是我的代碼。我想要在數據從Web服務分配到數組之後返回一個包含數據的數組。我有use block來檢查。 這是從我的頭文件...如何在成功塊中返回一個NSArray,iOS,Objective-C

typedef void(^FailureBlock)(NSError *error); 
typedef void(^SuccessBlock) (NSMutableArray *responseArray); 

這是我的執行文件....

- (void)setupConnectionWithsuccess:(SuccessBlock)success failure:(FailureBlock)failure 
{ 
    airportArray = nil; 
    NSString *airportCode = [NSString stringWithFormat:@"some code"]; 
    NSString *authenticationCode = [NSString stringWithFormat:@"some api"]; 
    NSString *baseurl = [NSString stringWithFormat:@"some url",authenticationCode,airportCode]; 
// NSString *mainurlString = [NSString stringWithFormat:@""]; 
// NSURL *mainurl = [NSURL URLWithString:mainurlString]; 

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
    [manager GET:baseurl parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 

     NSArray *mainArray = (NSArray *)responseObject; 

     airportArray = [[NSMutableArray alloc] init]; 
     for (NSDictionary *all in mainArray) { 
      airports = [all objectForKey:@"Airport"]; 

      [airportArray addObject:airports]; 
      NSLog(@"%@", airports); 
     } 

     if(success){ 
      success(airportArray); 
     } 

     //NSLog(@"%@", responseObject); 
    } 
    failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 

     if (failure) { 
      failure(error); 
     } 
     UIAlertController *mainAlert = [UIAlertController alertControllerWithTitle:@"Something Wrong!" message:[error localizedDescription] preferredStyle:UIAlertControllerStyleAlert]; 
     [self presentViewController:mainAlert animated:YES completion:nil]; 

    }]; 




} 

那麼成功後,我想將數組從這個method.how返回可我這樣做

- (NSArray *)returnAll 
{ 
    [self setupConnectionWithsuccess:^(NSMutableArray *responseArray) { 

    } failure:^(NSError *error) { 

    }]; 
} 

請幫我這個。我是iOS新手。

+0

你面臨什麼問題? –

+0

並且不需要檢查是否(成功)和如果(失敗)因爲兩個塊的不同而不同。 –

+0

您無法返回塊中的任何內容,而是您在代碼中調用此處時必須使用該塊 當您調用此 [self setupConnectionWithsuccess:^(NSMutableArray * responseArray){ nsmutable array here } failure:^(NSError * error){ }]; – jogshardik

回答

0

嘗試如下這裏我用的ID,因爲在ID可以傳遞anyobject

- (void)setupConnectionWithsuccess:(void (^)(id responseObject, NSError *error))completion{ 
airportArray = nil; 
NSString *airportCode = [NSString stringWithFormat:@"some code"]; 
NSString *authenticationCode = [NSString stringWithFormat:@"some api"]; 
NSString *baseurl = [NSString stringWithFormat:@"some url",authenticationCode,airportCode]; 
// NSString *mainurlString = [NSString stringWithFormat:@""]; 
// NSURL *mainurl = [NSURL URLWithString:mainurlString]; 

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
[manager GET:baseurl parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 

    NSArray *mainArray = (NSArray *)responseObject; 

    airportArray = [[NSMutableArray alloc] init]; 
    for (NSDictionary *all in mainArray) { 
     airports = [all objectForKey:@"Airport"]; 

     [airportArray addObject:airports]; 
     NSLog(@"%@", airports); 
    } 

    if (completion) 
     completion(responseObject,nil); 

    //NSLog(@"%@", responseObject); 
} 
    failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 

     if (completion) 
      completion(nil,error); 
     UIAlertController *mainAlert = [UIAlertController alertControllerWithTitle:@"Something Wrong!" message:[error localizedDescription] preferredStyle:UIAlertControllerStyleAlert]; 
     [self presentViewController:mainAlert animated:YES completion:nil]; 

    }];} 

,並把它稱爲

[self setupConnectionWithsuccess:^(id responseObject, NSError *error) { 
    if (responseObject) { 
     NSLog(@"responsceObect"); 
    } 
}]; 
0

它什麼也得不到,而你的函數返回。因爲你的區塊以異步化的方式執行。你應該修改你的函數來處理塊中的數組數據。