2014-03-28 58 views
0

我如何可以等待特定的任務來完成?等待一個任務就在Xcode

這就是我想要做的事:

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:stringURL]]; 

if (!data) { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%@", NOCONNECTIONALERTTITLE] message:[NSString stringWithFormat:@"%@", NOCONNECTIONALERTMESSAGE] delegate:self cancelButtonTitle:[NSString stringWithFormat:@"%@", NOCONNECTIONALERTCANCELBUTTON] otherButtonTitles:nil, nil]; 
    [alert show]; 
} else { ... } 

if始終是假的,因爲其所謂的數據,即使被初始化之前。我100%確定,連接已建立。

我想用這個作爲一個很不錯的選擇以編程方式檢查網絡連接。

回答

2

dataWithContentsOfURL:是一個阻塞調用,因此,當您嘗試使用它data被初始化。如果它爲零,那麼您可能遇到了您嘗試加載的網址的問題。

因爲這是阻止你不應該使用它在主線程上。而且,通常情況下,您不應該等待完成 - 您應該擁抱網絡操作的異步性質,並使用適當的異步API和設計來處理它們。

登錄您要創建以檢查它的存在(如果它不固定)NSURL


運行異步下載和處理結果的最簡單的選擇是使用NSURLConnection +sendAsynchronousRequest:queue:completionHandler:。以[NSOperationQueue mainQueue]的形式提供隊列,以便您的回調在主線程上運行,並且您可以更新UI。

+0

你是對的!我的錯!你能告訴我更多關於ios中的異步任務嗎? – Philip

+0

在答案中增加了一個簡單的選項。有很多選項取決於請求和響應的細節以及你將要對結果做什麼... – Wain

+0

它基本上是一個從某個URL抓取JSONArray的任務。 – Philip