2012-02-14 4 views
1

私は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として定義されている場合

答えて

2

あなたはそれのViewControllerクラスで

self.myLabel.text = @"blah"; 

どこでも呼び出すことができます。

ラベルは定義されていて、IBOutletとして正しく接続されていますか?

編集:

これはMainViewControllerでメソッドを呼び出して、クラスBの場合であるが判明。 MainViewControllerのメソッドで、ラベルテキストを更新できます。プロトコルを使用して、メソッド呼び出しを適切に委譲します。

+0

私はIBOutletとしてメインビューコントローラの '@プロパティ'として定義し、 '@合成'しました。私はviewDidLoadのテキストを変更することができ、別のクラスによって呼び出される関数ではなく、IBActionによって直接呼び出される関数内のテキストを変更することができます。 – user1205315

+0

別々のクラス?はい、できません。別のクラスで定義されている変数ではありません – mbh

+0

いいえ、上記の私の記事のように、クラスのデータ読み込みが完了すると、別のクラスがMainViewControllerの関数を呼び出します。そのクラスは、MainViewController内の関数にデータが埋め込まれたオブジェクトを渡します。 MainViewControllerの関数は、データが入力されたオブジェクトを受け取ります。私は問題なしでその機能のオブジェクトからのすべての情報をNSLogできます。問題は、関数がラベル内のテキストを変更しないことです。上のmyLabel.textを設定したコードでは、上のコードを明確に見ることができますが、動作しません。 self.myLabel.textを使用しても違いはありません。 – user1205315

1

委任またはKVOまたはNSnotifactionを使用します。私はあなたの問題のユーザーを理解しています。

メインビューコントローラのインスタンスを作成し、ラベルプロパティの設定/更新を依頼すると、それは更新テキストの新しいオブジェクトになります。

あなたは非同期メソッドを使用しており、戻り値の時間枠は予測不可能なので、メッセージの受け渡しを簡単にしたい場合はNSnotificationを使用することをお勧めします。実際にそれらのすべてを実装してみてください。あなたは明確な考えを持っています。

関連する問題