2012-02-14 53 views
1

我有一個主視圖控制器,其按鈕附加到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。我會發佈一個單獨的問題,看看是否有人對這個問題有辦法。

回答

2

如果您的UILabel myLabel被定義爲一個IBOutlet可以調用該視圖 - 控制類

self.myLabel.text = @"blah"; 

任何地方。

那麼標籤是如何定義和正確連接的IBOutlet?

編輯:

原來這是B類的調用MainViewController的方法的情況。在MainViewController中的方法中,您可以更新標籤文本。使用協議來適當地委託方法調用。

+0

我將它定義爲一個IBOutlet,作爲主視圖控制器的'@property'和'@synthesized'它。我可以更改viewDidLoad中的文本,並且可以更改由IBAction直接調用的函數中的文本,而不是通過由單獨的類調用的函數。 – user1205315 2012-02-14 04:34:17

+0

單獨課?是的,你不能。它不是在單獨的類中定義的變量 – mbh 2012-02-14 04:41:17

+0

不,因爲我上面的帖子所述,單獨的類在完成加載數據時在我的MainViewController中調用一個函數。該類將數據填充對象傳遞給MainViewController中的函數。 MainViewController中的函數接收數據填充對象。我可以NSLog記錄來自該函數中的對象的所有信息,沒有任何問題。問題是該函數不會更改標籤中的文本。您可以在我的代碼中清楚地看到上面我設置myLabel.text,但它不起作用。使用self.myLabel.text也不例外。 – user1205315 2012-02-14 05:04:37

1

使用授權或KVO或NSnotifaction。我瞭解你的問題用戶。

所以,如果你創建了主視圖控制器的一個實例,並要求它設置/更新標籤屬性,那麼這將成爲一個帶有更新文本的新對象。

由於您使用的是異步方法,並且返回值的時間框架是不可預測的,所以如果您希望使消息傳遞看起來很簡單,我建議您使用NSnotification,否則請轉至授權。其實嘗試所有這些。你會有一個清晰的想法。

相關問題