2011-08-02 15 views
1

私は別の関数を呼び出す関数を持っています。 2番目の関数が3番目の関数を呼び出すようにします。彼らはすべて最初の関数に戻り、コードを終了します。デイジーチェーン関数呼び出し(メソッド1はメソッド2を呼び出し、メソッド2はメソッド3を呼び出します)

-(void) select 
{ 
    //do code 
    [self drawMap]; 
} 

-(void) drawMap 
{ 
    //do code 
    [self performSelector:@selector(showActionSheet) withObject:nil afterDelay:2]; 
} 

-(void) showActionSheet 
{ 
    //do code 
} 

しかし、showActionSheet関数は呼び出されておらず、起動されていません。

編集:私は

[self showActionSheet]; 

[self performSelector:@selector(showActionSheet) withObject:nil afterDelay:2]; 

を変更した場合、それが正常に動作します。しかし、私はアクションシートの表示を数秒遅らせるので、ユーザーは地図の変更を見ることができます。

答えて

0

performSelector:withObject:afterDelayメソッドが正常に動作するためには、showActionSheetメソッドにidパラメータを追加する必要があると思います。

-(void) showActionSheet:(id) obj { ... } 

そして、あなたはあなたのセレクタにコロンを追加する必要があり、追加MByD @として::

[self performSelector:@selector(showActionSheet:) withObject:nil afterDelay:2]; 
+1

とセレクタ "showActionSheet:" – MByD

+0

私はうまくいきませんでした。 .hと.mファイル(idパラメータを追加)の両方の関数に変更を加え、関数呼び出しを変更して ":"を追加しました。まだ発火しません。 – Padin215

0

あなたがスレッドでこれをやっている

はにあなたのメソッドのシグネチャを変更してみてくださいNSRunLoppがありません。なぜなら、入力の処理に責任があるだけでなく、時間のかかる処理の実行も担当するのがNSRunLoopです。

また、それは、あなたが戻ってあなたのNSRunLoopに戻す前に、長時間実行されているいくつかのコードを持っている場合NSRunLoopは、入力および火災時限イベントを待つためにチャンスを与えていない可能性があなたのですNSRunLoopはこれまで何もしないという変更を加えません。あなたがあなたの代わりに

- [NSObject performSelector:(SEL)aSelector 
       withObject:(id)anArgument 
       afterDelay:(NSTimeInterval)delay 
        inModes:(NSArray *)modes]; 

を使用して、行のデフォルトの1(NSDefaultRunLoopMode)以外の別のモードを試してみても奇妙な方法でNSRunLoopあなたを設定している場合

別の可能性はあります。

関連する問題