Как вернуть массив местоположений для PINCode в качестве входного параметра с блоком завершения кода?
У меня есть сценарий, в котором пользователь вводит номер PINCode и тот номер, который я должен передать в качестве параметра в API веб-сервисов (пользователь, который является одноэлементным классом), тогда я получу массив местоположений в качестве ответа и тот ответ, который я должен показать в Lable ниже текстового поля PINCode. Итак, что я понял, я должен создать метод с блоком завершения в этом методе. но я сомневаюсь, как можно получить массив мест для представления в метке. Я очень запутался, и я попробовал это
API.h
+(void)submitPINCode:(NSInteger *)pinCode CompletionBlock:(void(^)(BOOL status, NSArray * responseArray))handler;
API.m
+(void)submitPINCode:(NSInteger *)pinCode CompletionBlock:(void(^)(BOOL, NSArray *))handler
{
NSString *string = [NSString stringWithFormat:@"%@%@",URL,pinCode];
NSURL *url = [NSURL URLWithString:string];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
operation.responseSerializer = [AFXMLParserResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
BOOL status = NO;
if (operation.response.statusCode == kStatusCodeSuccessfullResponse) {
status = YES;
// here we have to send an array so make the response object in to array or create a response Dictionary as you wish
NSArray *responseArray = (NSDictionary *)responseObject;
}
handler(status,BfErrorCodeUnknownError, responseArray);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSInteger statusCode = operation.response.statusCode;
BfErrorCode errorCode = BfErrorCodeUnknownError;
if (statusCode == kStatusCodeNoInternetConnection) {
errorCode = BfErrorCodeNetworkError;
}
NSString *errorMessage = [NSString stringWithBfErrorCode:errorCode];
handler(NO,errorCode,nil); // here if nil is doesnt work just pass an empty array instead of nil create an array and pass it
}];
// [operation start];
}
Поэтому я сомневаюсь:
1) Я иду по правильному пути или какие изменения я должен сделать, чтобы получить ответ, и
2) Я должен создать метод класса или метод экземпляра? Где я должен создать класс и методы экземпляра в целом для подобных ситуаций?
1 ответ
Может быть, это может помочь вам:
API.h
typedef NS_ENUM (NSInteger, WebServiceResult)
{
WebServiceResultSuccess = 0,
WebServiceResultFail,
WebServiceResultError
};
typedef void(^myCompletionA)(NSDictionary *data,WebServiceResult result);
+(void)postDataDict:(NSInteger *)pinCode isLoding:(BOOL)loading WithBlock:(myCompletionA)compileBlock;
API.m
+(void)postDataDict:(NSInteger *)pinCode isLoding:(BOOL)loading WithBlock:(myCompletionA)compileBlock{
if ([objAppDelegate connected]) {
if (loading) {
[SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeNone];
}
NSString *urlString=[[NSString stringWithFormat:@"%@%@",BASE_URL,pinCode] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
// manager.requestSerializer = [AFJSONResponseSerializer serializer];
//manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
[manager POST:urlString parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) {
[SVProgressHUD dismiss];
// NSLog(@"Response : %@",responseObject);
if ([responseObject[@"status"] isEqualToString:@"success"])
{
compileBlock(responseObject,WebServiceResultSuccess);
}
else
{
compileBlock(responseObject,WebServiceResultFail);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSDictionary *errorDict=[[NSDictionary alloc]initWithObjectsAndKeys:error,@"error", nil];
compileBlock(errorDict,WebServiceResultError);
NSLog(@"%@",error.description);
[SVProgressHUD dismiss];
} ];
}
else
{
[objAppDelegate showMessage:@"No internet connection." withTitle:@"nil"];
}
}