私はREFRESH()
というIBActionにボタンを付けたメインビューコントローラを持っています。 REFRESH()
アクションでは、WebServiceからXMLを非同期に要求し、そのデータからオブジェクトを作成するクラス内の関数を呼び出します。別のクラスから呼び出されたMainViewController内のLabel.textをvoid関数から変更する
メインビューコントローラには、クラスファイル内のXMLから作成されたオブジェクトを受け入れる ``(void)RECEIVED_DATA()という別の関数があります。この関数は、データがサーバーから受信された後にクラスファイルからのみ呼び出されます。その時点で、メインビューコントローラのラベルにテキストを設定します。残念ながら、私はできません。ボタンのクリックに添付された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.
}
は、私は戻ってviewDidLoad()
機能へRECEIVED_DATA(
)機能を結びつけるための方法を探しているべきか?
UPDATE- 別のユーザーは、データが別のスレッドによって取得されるため、UIがメインスレッドで実行されているため、UIに影響を与えないことを示しています。私は誰かがこの問題へのアプローチを持っているかどうかを見るために別の質問を掲示するでしょう。あなたのUILabel mylabelというのIBOutletとして定義されている場合
私はIBOutletとしてメインビューコントローラの '@プロパティ'として定義し、 '@合成'しました。私はviewDidLoadのテキストを変更することができ、別のクラスによって呼び出される関数ではなく、IBActionによって直接呼び出される関数内のテキストを変更することができます。 – user1205315
別々のクラス?はい、できません。別のクラスで定義されている変数ではありません – mbh
いいえ、上記の私の記事のように、クラスのデータ読み込みが完了すると、別のクラスがMainViewControllerの関数を呼び出します。そのクラスは、MainViewController内の関数にデータが埋め込まれたオブジェクトを渡します。 MainViewControllerの関数は、データが入力されたオブジェクトを受け取ります。私は問題なしでその機能のオブジェクトからのすべての情報をNSLogできます。問題は、関数がラベル内のテキストを変更しないことです。上のmyLabel.textを設定したコードでは、上のコードを明確に見ることができますが、動作しません。 self.myLabel.textを使用しても違いはありません。 – user1205315