1

何らかの理由で、アクティビティ インジケーターをすぐに表示できません。多分誰でも理由を見ることができますか?

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
spinner.center = self.view.center; 
_active = spinner;
[self.view addSubview:spinner];
[spinner startAnimating];
@try {

    [self connectToServerUsingStream:ip portNo:port];
    NSString *text = @"test";
    const uint8_t *str =
    (uint8_t *) [text cStringUsingEncoding:NSASCIIStringEncoding];
    [self writeToServer:str];

}
@catch (NSException * e) {
    NSLog(@"Exception: %@", e);
}

スピナーは、サーバーへの接続が確立された後にのみ表示され、それ以前は表示されません。何か案は?

4

3 に答える 3

3

以下の更新されたコードを使用します。うまくいくと思います。

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
spinner.center = self.view.center; 
 _active = spinner; 
[self.view addSubview:spinner]; 
[spinner startAnimating]; 
[self performSelector:@selector(performTask) withObject:nil afterDelay:0.0];

- (void)performTask {
     @try {
         [self connectToServerUsingStream:ip portNo:port];
         NSString *text = @"test";
         const uint8_t *str =
         (uint8_t *) [text cStringUsingEncoding:NSASCIIStringEncoding];
         [self writeToServer:str];

     }
     @catch (NSException * e) {
         NSLog(@"Exception: %@", e);
     } 
}
于 2012-11-30T06:53:00.657 に答える
0

メソッドの後のこの行[spinner startAnimating];は、アクティビティが表示されない理由であるメインスレッドをブロックします。

そのコードを次のように変更してください。

dispatch_queue_t taskQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(taskQ, ^{
   @try
   {

     [self connectToServerUsingStream:ip portNo:port];
     NSString *text = @"test";
     const uint8_t *str =
     (uint8_t *) [text cStringUsingEncoding:NSASCIIStringEncoding];
     [self writeToServer:str];
   }
   @catch (NSException * e)
   {
     NSLog(@"Exception: %@", e);
   }
});
于 2012-11-30T06:56:12.173 に答える
0

以下のコードを置き換えます

[スピナー performSelectorOnMainThread:@selector(startAnimating) withObject:nil waitUntilDone:TRUE];

それ以外の..

[スピナースタートアニメーション];
于 2012-11-30T06:53:48.423 に答える