проблема, я загружаю индикатор прогресса в iphone SDK? - PullRequest
0 голосов
/ 19 июля 2011

Я хочу получить список с сервера, это занимает некоторое время, поэтому в это время я показываю индикатор прогресса. Моя проблема иногда появляется индикатор прогресса, а иногда он не появляется. Код, который я использовал:

-(void)viewWillAppear:(BOOL)animated

{
     [self loadprogressIndicator];  
}

-(void)loadprogressIndicator
{
     MessengerAppDelegate* appDelegate = (MessengerAppDelegate*) [ [UIApplication sharedApplication] delegate];
    [appDelegate showWaitingView];

    [NSThread detachNewThreadSelector:@selector(statusIndicatorForRefresh) toTarget:self withObject:nil];
}

-(void)statusIndicatorForRefresh
{   
    NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init];
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    [self performSelectorOnMainThread:@selector(loadList) withObject:nil waitUntilDone:NO];
    [NSThread exit];
    [pool release];
}

-(void)loadList
{   
    MessengerAppDelegate* appDelegate = (MessengerAppDelegate*) [ [UIApplication sharedApplication] delegate];
    customerList = [appDelegate getCustomersArray];
    [theTableView reloadData];
    [appDelegate removeWaitingView];
}

And in appdelegate.m I implemeted these two methods

- (void)showWaitingView 
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    CGRect frame = CGRectMake(90, 190, 32, 32);
    UIActivityIndicatorView* progressInd = [[UIActivityIndicatorView alloc] initWithFrame:frame];
    [progressInd startAnimating];
    progressInd.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
    frame = CGRectMake(130, 193, 140, 30);
    UILabel *waitingLable = [[UILabel alloc] initWithFrame:frame];
    waitingLable.text = @"Processing...";
    waitingLable.textColor = [UIColor whiteColor];
    waitingLable.font = [UIFont systemFontOfSize:20];
    waitingLable.backgroundColor = [UIColor clearColor];
    frame = [[UIScreen mainScreen] applicationFrame];
    UIView *theView = [[UIView alloc] initWithFrame:frame];
    theView.backgroundColor = [UIColor blackColor];
    theView.alpha = 0.7;
    theView.tag = 999;
    [theView addSubview:progressInd];
    [theView addSubview:waitingLable];
    [progressInd release];
    [waitingLable release];
    [window addSubview:[theView autorelease]];
    [window bringSubviewToFront:theView];
    [pool drain];
}

- (void)removeWaitingView 
{
    UIView *v = [window viewWithTag:999];
    if(v) [v removeFromSuperview];

}

Может кто-нибудь, пожалуйста, помогите мне. Счастливого кодирования ..

Заранее спасибо.

Praveena ..

1 Ответ

0 голосов
/ 19 июля 2011

Вы делаете всю свою деятельность в главном потоке.Ваше приложение будет заблокировано, потому что вы блокируете поток пользовательского интерфейса.

Кроме того, какой смысл запускать NSThread, если все, что он делает, это вызывает метод в вашем основном потоке и даже не ждет его завершения?Вы вообще не выполняете многопоточность.

Ваше приложение делает это:

в основном потоке:

  • показ ожидания
  • до 1 запускацикл цикл
  • выполнять обработку данных
  • скрыть представление ожидания

, поскольку обработка данных выполняется в главном потоке, вы блокируете все там.Вы должны выполнить обработку во вторичном потоке и оставить основной поток для обработки пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...