2012-07-05 2 views
2

Я сделал именно то, что дал . Я создал консольный проект для тестирования. И затем я создал класс под названием RequestSender (см. Код ниже), и я сделал экземпляр этого класса в основной функции.Почему мои методы делегирования NSURLConnection не вызываются?

RequestSender.h:

#import <Foundation/Foundation.h> 
@interface RequestSender : NSObject <NSURLConnectionDelegate> { 
    NSMutableData* d; 
} 
@end 

RequestSender.m:

#import "RequestSender.h" 

@implementation RequestSender 

- (id)init { 
    self = [super init]; 
    if (self) { 
     NSString* s = @"http://www.apple.com/"; 
     NSURL* u = [[NSURL alloc] initWithString:s]; 
     NSURLRequest* r = [[NSURLRequest alloc] initWithURL:u]; 
     NSURLConnection* c = [[NSURLConnection alloc] initWithRequest:r delegate:self]; 
     if (c) { 
      d = [NSMutableData data]; 
     } 

     return self; 
    } else { 
     return nil; 
    } 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [d setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [d appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 

} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
} 


@end 

Это, несомненно, будет выполняться в основном потоке и по умолчанию цикла выполнения. Однако не вызываются методы делегирования.

Я провел много испытаний и прочитал много сообщений, но у меня все еще нет подсказки.

Пожалуйста, помогите мне. Это сводит меня с ума. Thanx!

+0

Ваш код выглядит хорошо. Как вы это называете? Как он встроен в ваше приложение? – Codo

+0

Ваш код абсолютно прав. Проверить self - null или нет? –

+0

@ Код: В моем приложении еще нет. Я создал консольный проект для его проверки. все файлы перечислены выше. Единственный дополнительный код находится в основной функции, которая выглядит как «RequestSender * rs = [[RequestSender alloc] init];». Я добавил точки останова для каждого метода делегирования, но никто не был захвачен. –

ответ

0

Я считаю, что вам не хватает части, где вы находитесь start соединение. Класс соединения предлагает другой метод для этого, или вы можете просто вызвать его из своего объекта «c».

NSURLConnection* c = [[NSURLConnection alloc] initWithRequest:r delegate:self]; 
if (c) { 
    d = [NSMutableData data]; 
    [c start]; 
} 

или

NSURLConnection* c = [[NSURLConnection alloc] initWithRequest:r delegate:self startImmediately:YES]; 
if (c) { 
    d = [NSMutableData data]; 
} 
+0

Кроме того, ничего себе - не понял, что этот вопрос был таким старым. Надеюсь, вы смогли исправить это и еще не дождались ответа! – shortstuffsushi

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

  • Нет связанных вопросов^_^