2012-03-16 11 views
1

私はいくつかのタスクを行うparticluarメソッドでループする必要があります。私はperformselectoronmainthreadメソッドがdoneメソッドまで待つメソッドを使用しました。私は一度それを呼び出す場合、その正常に動作します。しかし、forループを呼び出すと失敗します。すなわち これはコードです:performselectoronmainthreadを使用して特定の方法でループしたい

for (int i=1;i<=3;i++) { 
      ip=i; 
     [self performSelectorOnMainThread:@selector(createThread:) withObject:ip waitUntilDone:YES]; 
    } 

-(void)createThread:(NSString*)ipIs 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    NSLog(@"Ip address is :%@",ipIs); 
    [SimplePingHelper ping:ipIs target:self sel:@selector(Result:)]; 
    [pool release]; 

} 
- (void)Result:(NSNumber*)success { 
    //do some stuff 

} 

問題は、私は一度、このループを実行し、それが結果のメソッドを呼び出したときに、このコードは正常に動作していることです。しかし、performSelectorOnMainThreadでループを使用して別の変数をit.Thenに渡すと、実行パスが変わり、結果メソッドが呼び出されません。

異なる変数で同じメソッドを実行したいが、実行するタスクが同じであるためループしています。私はwaituntilを使用しています:YES value..butまだ動作していません アイデアはありますか?

+0

を、私はCreateThreadを方法の目的が何であるかわからないんだけど、あなたはのメインスレッドをブロックしています実行中のアプリケーション(waitUntilDone:YES)。それはおそらくほんの少しの時間がかかりそうであることが分かっていない限り、*ひどい*のアイデアです。 (そして "IP"が "IPアドレス"を意味していて、何かネットワーク関連のことをやっているなら、間違いなくメインスレッドをブロックしてはいけません。) –

答えて

0

が他のスレッドを作成

myThread = [[NSThread alloc] initWithTarget:self selector:@selector(setupTimerThread) object:nil]; 
[myThread start]; 
-(void)setupTimerThread 
{ 


NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 



timer2 = [NSTimer timerWithTimeInterval:0.04 
             target:self 
             selector:@selector(triggerTimer:) 
             userInfo:nil 
             repeats:YES]; 
NSRunLoop* runLoop = [NSRunLoop currentRunLoop]; 

[runLoop addTimer:timer2 forMode:NSDefaultRunLoopMode]; 
[runLoop run]; 

[pool release]; 
} 
-(void)triggerTimer: 
{ 
//this method will be called in loop set loop interval by setting the timers time duration in above method 
} 

EDITしてみてください:それは価値がある何のため

int ip=0; 
-(void)triggerTimer: 
    { 
ip++; // till ip<=3 
[self createThread:ip]; 
    } 
+0

または、単にsetupTimerThreadメソッドのようなタイマーを作成できます私はセカンダリのスレッドの残りの選択でこれを行うことをお勧めします.. – Tornado

+0

ええ、しかし、それは私の問題を解決しません。 createThreadメソッドを何度も繰り返し実行したいのですが、別の変数(引数 "ip = i")を使用しています。それはforループによって決定されるでしょう。あなたが書いたコードは、ある時間(.04)後に同じメソッドをトリガーするでしょうが、同じ引数で – user1237220

+0

あなたはどこですか? – user1237220

関連する問題