2013-02-23 33 views
0

我試圖異步加載網頁內容。我不確定在調用connectionDidFinishLoading方法後,如何更新視圖控制器中的標籤/其他內容。在下面的示例中,我只是試圖更新標籤以顯示內容已加載。我將如何做到這一點?謝謝!更新視圖控制器connectionDidFinishLoading被稱爲

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"Succeeded! Received %d bytes of data",[responseData 
                length]); 
    NSString *txt = [[NSString alloc] initWithData:responseData encoding: 
    NSASCIIStringEncoding]; 

    label.text = @"DISPLAY THIS WHEN FINISHED"; 
} 

有人告訴我,讓我的viewController是NSURLConnectionDelegate,然後將運行從viewDidLoad中的fetchData方法,然後使用你給我們的數據時,它是在connectionDidFinishLoading獲取的數據。任何人都知道從哪裏開始?謝謝!

+0

每個視圖需要在主線程進行更新。 – 2013-02-23 10:18:15

+0

我想我的問題是如何在主線程上更新這個視圖。爲什麼這會降低? – Brandon 2013-02-23 10:19:48

+0

你的問題不是很確切,你只是問如何做到這一點,而沒有真正的嘗試。 – 2013-02-23 10:24:53

回答

1

正如拉米正確地指出,必須在主線程上更新UI,則:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSLog(@"Succeeded! Received %d bytes of data",[responseData length]); 
    NSString *txt = [[NSString alloc] initWithData:responseData 
             encoding: NSASCIIStringEncoding]; 

    NSString *text = @"DISPLAY THIS WHEN FINISHED"; 
    [label performSelectorOnMainThread:@selector(setText:) withObject:text waitUntilDone:NO] 
} 
+1

connectionDidFinishLoading是在連接開始的同一個線程上調用的,大多數情況下是主線程(否則你必須管理一個單獨的runloop等等)。因此'performSelectorOnMainThread'可能沒有必要。 – 2013-02-23 11:02:50

+0

「大多數情況下」和「可能」在您的評論中,根據您所說的話,不能保證該方法將在主線程中被調用,出現高概率?可能但不確定 – 2013-02-23 11:08:47

+1

好的,我表達得很糟糕。我想說的是:在connectionDidFinishLoading中使用'performSelectorOnMainThread'只有在主線程沒有啓動連接時才需要。 – 2013-02-23 11:13:51

相關問題