1

私のアプリ データは Web サービスから取得され、アクティビティ インジケーターを表示するコードを実装しました。viewWillAppear() で Web サービスからデータをフェッチします。

問題は、最初に viewWillAppear() が呼び出されたときにインジケーターが 1 回だけ表示され、その後、viewWillAppear() メソッドが呼び出されるたびにインジケーターが表示されないことです。

私のコードは次のとおりです:-

-(void)viewDidAppear:(BOOL)animated
{
    //Initializaing  views for Acticity Indicators
   loadingview = [[LoadingView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];    
    Tickview=    [[tickview alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];   
}

-(void)viewWillAppear:(BOOL)animated
{
        Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"];
        NetworkStatus internetStatus = [r currentReachabilityStatus];
        if ((internetStatus == ReachableViaWiFi) || (internetStatus == ReachableViaWWAN))
        {                 
           [NSThread detachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:self withObject:nil];

        }
        else
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Check Your Internet Connection. Internet   Connection is not active" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            [alert release];
        }       
}

- (void)startTheBackgroundJob
{
    [self performSelectorOnMainThread:@selector(loading) withObject:nil waitUntilDone:YES];

}

-(void)loading
{
     //
     //some database operations here..
     //


    //after that showing the activity indicator
    [NSThread detachNewThreadSelector:@selector(threadAnimates:) toTarget:self withObject:nil];



    //retriving data from web service..   
    [self retrieveData];


    //than removing loadingview
     [loadingview removeFromSuperview];
     [loadingview setHidden:YES];

    [NSThread detachNewThreadSelector:@selector(tickshow:) toTarget:self withObject:nil];
    [self performSelector:@selector(tickhide:) withObject:nil afterDelay:2]; 

}

 - (void) threadAnimates:(id)data
{
[self.view addSubview:self.loadingview];

[loadingview setHidden:NO];

}

-(void)tickshow:(id)sender
{
    [self.view addSubview:Tickview];
    [loadingview setHidden:NO];
}

-(void)tickhide:(id)sender
{
    [Tickview removeFromSuperview];
    [Tickview setHidden:YES];
}

そして、ダベギングのブレークポイントを配置すると、インジケーターが再び表示されますが、ブレークポイントを削除すると、インジケーターは表示されません。

.h ファイルとプロジェクトの両方で、loadingview と tickview 用に個別のファイルをインポートしました。

私は多くのことを試しましたが、解決策を得ることができませんでした。

私を助けてください。

4

4 に答える 4

4

このコードを試してください

-(void)viewDidAppear:(BOOL)animated
{
    //Initializaing  views for Acticity Indicators
   loadingview = [[LoadingView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];    
    Tickview=    [[tickview alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];   
    [loadingview startAnimating];
   [self.view addSubview:loadingview];

   [self.view bringSubviewToFront: loadingview];
}

編集:

ビューにアクティビティインジケーターを追加するための以下のコードも試してください

        UIActivityIndicatorView *spinningWheel = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(10.0, 11.0, 25.0, 25.0)];
        [spinningWheel startAnimating];
        spinningWheel.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
        [self.view addSubview:spinningWheel];
        [spinningWheel release];

これがあなたを助けることを願っています..

:)

于 2012-10-05T10:00:57.393 に答える
0

メソッド[self.ActiveIndicatorName startAnimating];にステートメントのみを書き込みます。ViewWillAppear

-(void)viewWillAppear:(BOOL)animated
{
      [self.ActiveIndicatorName startAnimating];

        Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"];
        NetworkStatus internetStatus = [r currentReachabilityStatus];
        if ((internetStatus == ReachableViaWiFi) || (internetStatus == ReachableViaWWAN))
        {                 
           [NSThread detachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:self withObject:nil];

        }
        else
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Check Your Internet Connection. Internet   Connection is not active" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            [alert release];
        }       
}
于 2012-10-05T09:37:45.300 に答える
0

request をロードしたらすぐに、インジケーター [myActivityIndi​​cator startAnimating]; のロードを開始する必要があります。デリゲートを使用して停止します。アクティビティ インジケータが nib ファイルで作成されている場合は、停止時に非表示に設定することを忘れないでください (停止すると非表示になります)。これが役立つことを願っています。

于 2012-10-05T09:48:54.350 に答える
0

このようにメソッドを変更しViewWillAppearます....

-(void)viewWillAppear:(BOOL)animated
{
//Initializaing  views for Acticity Indicators
loadingview = [[LoadingView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];    
Tickview=    [[tickview alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];  
[Tickview startAnimating];
}
于 2012-10-05T09:41:43.190 に答える