2012-07-05 288 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

你的代碼是絕對正確的。檢查自己是否爲空? –

+0

@代碼:它不在我的應用程序中。我創建了一個控制檯項目來測試它。所有文件都在上面列出。唯一額外的代碼在主函數中,如「RequestSender * rs = [[RequestSender alloc] init];」。我在每個代表團方法中添加了斷點,但沒有一個被捕獲。 –

回答

0

我相信你錯過了開始連接的部分。連接類爲此提供了另一種方法,或者您可以將其稱爲「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

相關問題