0

UIButton がクリックされたときに activityindicator を追加し、サービス URL からのデータが読み込まれるまでアニメーション化を続けたいと思います。読み込まれると、次のビューに移動します。しかし、私はそれを行うことができません..

これが私のコードです..

 -(IBAction)switchtoGetProviders
    {
        UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(225, 115, 30, 30)];
        [activity setBackgroundColor:[UIColor clearColor]];
        [activity setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
        [self.view addSubview:activity];
        [activity release];
        [activity startAnimating];

        NSURL *urlString= [NSString stringWithFormat:@"http://www.something.net/service.svc/Xml"];

        if(arr.count>0)
        {
            [activity stopAnimating];
            ViewController2 *gp=[ViewController2 alloc];
            [self presentModalViewController:gp animated:NO];
            [gp release];
        }
else
{
 UIAlertView *alert = [[[UIAlertView alloc]initWithTitle: @"Results not found"
                                                                  message: @""
                                                                 delegate: self
                                                        cancelButtonTitle:@"OK"
                                                        otherButtonTitles:nil]autorelease];


                  [alert show];         
       }
    }

実際にここで arr が null の場合、alertView. OKボタンをクリックするとアニメーションが停止しalertViewますが、タッチするとすぐに開始したい..どうすればいいですか?どこが間違っているのですか?activityindicatoralertViewUIbutton

4

2 に答える 2

1

アニメーションを停止する前にそれを解放しないでください..解放すると、その参照が失われます..

 [activity release];//Dont Release here 
 [activity startAnimating]; 



     [activity stopAnimating];
[activity release];
于 2012-11-07T10:48:08.710 に答える
0

コードには複数の問題があります。

UIActivityIndicatorView1 つ目はリリースです。これは早い段階で行われます。2 つ目は、UI に を追加してアニメーションを開始する時間を与えません。また、割り当てinitたを忘れました。ViewController2

NSURL *urlString= [NSString stringWithFormat:@"http://....また、有効なNSURLオブジェクトを作成しないため、すべてのコードを投稿していないと思います。arrまた、変数の取得元がわかりません。

本当にすべてを 1 つのメソッドで実行したい場合は、GCD を使用する必要があります。

-(IBAction)switchtoGetProviders
{
    UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(225, 115, 30, 30)];
    [activity setBackgroundColor:[UIColor clearColor]];
    [activity setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
    [self.view addSubview:activity];
    [activity startAnimating];

    int64_t delayInSeconds = 0.1;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

        NSURL *urlString= [NSString stringWithFormat:@"http://www.something.net/service.svc/Xml"];

        if(arr.count>0) {
            [activity stopAnimating];
            [activity  removeFromSuperview];
            [activity release];
            ViewController2 *gp= [[ViewController2 alloc] init];
            [self presentModalViewController:gp animated:NO];
            [gp release];
        } else { 
            UIAlertView *alert = [[[UIAlertView alloc]initWithTitle: @"Results not found" message: @"" delegate: self cancelButtonTitle:@"OK" otherButtonTitles:nil]autorelease];
            [alert show];
            [alert release];
    });
}
于 2012-11-07T10:52:24.543 に答える