我有一個主視圖控制器,其按鈕附加到IBAction,名爲REFRESH()
。 在REFRESH()
操作中,我在一個類中調用一個函數,該函數對WebService中的XML進行異步請求,並從該數據創建一個對象。從MainViewController中的void函數更改Label.text從一個單獨的類中調用
主視圖控制器上有另一個叫``(void)RECEIVED_DATA()的函數,它接受從我的類文件中的XML創建的對象。在從服務器接收數據後,此功能只能從我的班級文件中調用。此時,我想在我的主視圖控制器中的標籤上設置文本。不幸的是,我不能。我可以更改附加到按鈕單擊的REFRESH()
函數中的label.text,但無法在void函數中更改它,該函數在從類文件返回數據時被調用。
這裏有2個功能:
-(void)refresh
{
funcs *fn = [[funcs alloc]init]; //this is my class file which handles http request and response
[fn GetData];
}
-(void)received_Data:(DataObject *)x
{
myLabel.text = [x displayData]; //myLabel is a UILabel on my MainViewController and the displayData function returns an NSString. It won't even let me use myLabel.text = @"test"; Nothing happens.
}
我應該尋找一種方式,以配合RECEIVED_DATA(
)函數返回到viewDidLoad()
功能?
UPDATE - 另一位用戶表示,由於數據是由單獨的線程檢索的,因爲UI在主線程上運行時不會影響任何UI。我會發佈一個單獨的問題,看看是否有人對這個問題有辦法。
我將它定義爲一個IBOutlet,作爲主視圖控制器的'@property'和'@synthesized'它。我可以更改viewDidLoad中的文本,並且可以更改由IBAction直接調用的函數中的文本,而不是通過由單獨的類調用的函數。 – user1205315 2012-02-14 04:34:17
單獨課?是的,你不能。它不是在單獨的類中定義的變量 – mbh 2012-02-14 04:41:17
不,因爲我上面的帖子所述,單獨的類在完成加載數據時在我的MainViewController中調用一個函數。該類將數據填充對象傳遞給MainViewController中的函數。 MainViewController中的函數接收數據填充對象。我可以NSLog記錄來自該函數中的對象的所有信息,沒有任何問題。問題是該函數不會更改標籤中的文本。您可以在我的代碼中清楚地看到上面我設置myLabel.text,但它不起作用。使用self.myLabel.text也不例外。 – user1205315 2012-02-14 05:04:37