1

Я пытаюсь создать свой собственный класс запроса, который я намерен использовать во всем приложении. Вот код, который я до сих пор придумывал.NSURLConnectionDelegate callback в одной функции

-(IIWRequest *)initAndLaunchWithDictionnary:(NSDictionary *)dictionnary 
{ 
    self=[super init]; 
    if (self) { 
     // Create the request. 
     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://xxxxx.com/app/"]]; 

     // Convert data 
     SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init]; 
     NSString *jsonData = [jsonWriter stringWithObject:dictionnary]; 
     NSLog(@"jsonData : %@",jsonData); 
     NSData *requestData = [jsonData dataUsingEncoding: NSUTF8StringEncoding]; 
     request.HTTPBody = requestData; 

     // This is how we set header fields 
     [request setHTTPMethod:@"POST"]; 
     [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
     [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
     [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"]; 
     [request setHTTPBody: requestData]; 

     // Create url connection and fire request 
     NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 
     [self activateNetworkActivityIndicator]; 
     if (connection) { 
      NSLog(@"Connection"); 
     } else { 
      NSLog(@"No connection"); 
     } 
    } 
    return self; 
} 

Я включил NSURLConnectionDelegate. Я хотел бы запустить обратные вызовы соединения, например, закончил или не вернулся к функции, упомянутой ранее. В конце концов, для того, чтобы получить только один способ позвонить, в конце концов:

-(IIWRequest *)initAndLaunchWithDictionnary:(NSDictionary *)dictionary inBackgroundWithBlock:^(BOOL succeeded){} 

Любая идея? Благодаря !

ответ

1

Использование блочный метод класса NSURLConnection будет снижена функциональность вашего а sendAsynchronousRequest:queue:completionHandler:

Прочитайте эту doc.

+0

Спасибо! Это то, что я искал! –

1

Я бы вряд ли предложил вам использовать одну из существующих в настоящее время библиотек для вызова URL-адресов. Одним из лучших, что я знаю, является AFNetworking https://github.com/AFNetworking/AFNetworking. Существует много примеров и простота в использовании, и я уверен, что вы должны пойти с ним.

В любом случае, если вы хотите создать свой собственный класс, я предлагаю вам прочитать пост, написанный Казуки Сакамото здесь NSURLConnection and grand central dispatch.

С уважением

0

Если вы используете IOS 7, я рекомендую МНОГО вам использовать NSURLSession классы, эта новая сеть апи действительно удивительно и просто.

В любом случае, чтобы ответить на ваш вопрос, вам просто нужно удерживать ссылку обратного вызова в своем классе и вызывать его, когда вы получаете ответ от сервера.

Для хранения ссылки, вы можете сделать что-то вроде этого:

// in your .h file 
typedef void (^ResponseBlock)(BOOL success); 

// in your .m, create a class extension and put declare the block to use it for callback 
@interface MyClass() 
{ 
    ResponseBlock callback; 
} 

// You can store reference using equal like this 
- (void)myMethodRequestWithResponseBlock:(ResponseBlock)responseBlock 
{ 
    callback = responseBlock; 
    // statements 
} 

// And finally, you call back block simple like this: 
callback(success); 

Опять же, использовать NSURLSession апи, если вы можете, вы упростите вашу работу.

Надеюсь, это может вам помочь. Приветствия!

Смежные вопросы