2011-07-08 42 views
1

我正在通過Objective-C的基礎知識,我已經畢業了過去的語法,但我仍然沒有做任何特定於iOS的東西。無論如何,我試圖找出http請求,並且我無法使異步郵件正常工作。我可以在基礎「基礎」目標C文件中創建一個異步NSURL連接嗎?

我可以走的很基本的(這工作):

NSString *doc = [NSString stringWithContentsOfURL:url usedEncoding:&encoding error:&error]; 

NSLog(@"%@", doc); 

而且我可以做一個同步的請求(也適用):

NSData *urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error]; 

NSString *doc = [[NSString alloc]initWithData:urlData encoding:NSASCIIStringEncoding]; 

但當我嘗試這個辦法:

NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:url]; 
connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES]; 

我似乎無法獲得任何連接方法來觸發,如didReceiveResponse或didReceiveData。

因此,這裏是我的問題:

請問我試圖在一個命令行obejctiveÇ應用程序做的工作?

- 代表需要「自我」嗎?我可以做一個自定義的「委託」類,並添加類似的方法:

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    NSLog(@"Data"); 
} 

- 如果自定義委託是可能的,它是一個好主意嗎?我應該將上面的didReceiveData方法附加到執行連接的任何類上嗎?

- 我是否需要持續運行某種任務,以便在響應進入之前我的程序不會結束?

-Am我吠叫完全錯誤的樹?你能讓我直線嗎?

提前感謝您的時間。

回答

3

NSURLConnection和NSURLRequest都是Foundation框架的一部分,所以你應該在你的程序中使用它們。然而,每NSURLConnection的文檔:

用於連接到正確 工作調用線程的run loop必須 在默認的運行循環 模式下運行。

你會想要閱讀約NSRunLoop。你的命令行應用程序可能沒有運行循環,這就是爲什麼你的異步請求沒有達到你期望的。

委託並不一定是'自我' - 它可以是任何你喜歡的對象,只要該對象實現了合適的委託方法。

顯然,如果程序在連接完成之前退出,程序就不會獲取它正在查找的數據。

+0

完美,謝謝。我看到一些其他問題表明我應該繼續運行該程序,但我無法弄清楚它是如何實現的。 – eric