2012-04-12 18 views
1

他のクラスからアクセスする必要のあるクラス「loadingViewController」に関数があります。最初に私が次のような関数を呼び出すと、それはうまくいきますが、もう一度別のクラスから呼び出すと、それを再度割り当ててパラメータをリセットするためではありません。インスタンスメソッドを作成する場合も同じです。 initを使わずに別のクラスから関数を呼び出すか、もう一度割り当てる方法は?おそらく基本的な初心者の問題...ありがとう。objective-c別のクラスの関数を呼び出す

ヘッダーでクラスが宣言され、正しく合成されました。

self.loadingController = [[loadingViewController alloc] initWithNibName:@"loadingViewController" bundle:nil]; 
[loadingController incrementProgress:0.1]; 
+0

あなたにはタブバーがありますか? –

+0

あなたの "関数laodingViewController" *はインスタンスメソッドです。他のインスタンスメソッドと同様に、クラスのインスタンスを呼び出す必要があり、アクセスするフィールドはインスタンス内のフィールドになります。右のインスタンスを渡すと、適切なデータが得られます。 –

+0

(ヒント:メソッドを呼び出す方法について考え直し、既存のコンポーネント間で "状態"を伝達する必要があるかどうかを考え始めることで、コーディネートされた方法で機能させることができます。メソッドがアクセスするデータ) –

答えて

2

多くのコードを見ることなく確かに言うのは難しいが、私はあなたがちょうどあなたが一度だけloadingControllerを初期化することを確認する必要があると思っています:

if (self.loadingController == nil) { 
    self.loadingController = [[loadingViewController alloc] initWithNibName:@"loadingViewController" bundle:nil]; 
} 
[self.loadingController incrementProgress:0.1]; 
+0

これは、loadControllerは既に代理人から割り当てられているため、AppDelegate * appDelegate =(AppDelegate *)[[UIApplication sharedApplication] delegate]; [appDelegate.loadingController incrementaProgres:0.1];それを解決する!多くのありがとう – Jaume

1

あなたがここにprotocolsを実装することができます。プロトコルは、あるクラスから別のクラスのメソッドを呼び出すために使用されます。一般的には、クラスが実装する一連のメソッドを定義します。実装方法を確認するには、answerを参照してください。

-(void) loadingViewController 
{ 
    if (self.loadingController == nil) { 
     self.loadingController = [[loadingViewController alloc] initWithNibName:@"loadingViewController" bundle:nil]; 
    } 
    [self.loadingController incrementProgress:0.1]; 
} 

を、あなたがメインUIスレッド以外のスレッドから[XYZ loadingViewController]呼び出していないことを確認してください:

+0

私はプロトコルがこの時点で問題を混乱させると思います。 –

+0

ユーザーは学習者のようですが、他の人が疑問を抱くような場合に備えて、プロトコルを知ることになるよりも、これを実現する方法であることを伝えました。 :-) –

+0

@HotLicks:あなたは何をお勧めしますか?私は私の答えを取り除くべきですか? –

1

私はこれを行うだろう。

0

ビューコントローラで関数を呼び出す理由は、長い操作の進行状況をユーザーに提示するためです。

もっと一般的なアプローチは、ビューコントローラに操作を開始させてから、を観察して、それに応じてビューを更新することです。

関連する問題