Код не работает после возврата из фонового потока - PullRequest
0 голосов
/ 05 августа 2011

У меня есть табличное представление (имя файла - Five.m), которое отлично работает и правильно отображает данные в табличном представлении.Когда пользователь выбирает строку, он добавляет подпредставление, которое показывает индикатор прогресса на том же экране.После добавления подпредставления он запускает фоновый поток, который анализирует HTML-данные и добавляет их в базу данных SQLite3.Фоновый поток, вставка данных SQLIte, разбор HTML - все работает нормально.Теперь, когда он завершает работу, он возвращается к 5:00 в методе removeProgressInd, который удаляет индикатор прогресса и переходит к новому представлению таблицы (имя файла - TitleOnly.m).Он возвращается успешно, так как я вижу все сообщения NSLog из метода removeProgressInd.Но код не останавливает индикатор прогресса и не перемещается в новое представление таблицы.Код работает без ошибок.Я попытался запустить один и тот же код в viewDidLoad и viewDidAppear вместо removeProgressInd, но вижу только сообщения NSLog.Вот мой код.

Five.m - просмотр таблицы DidSelelectRow

{
    // start ProgressInd
    [self.view addSubview:self.progressInd];
      // shows progress Indicator on screen when I run my app in simulator

    // start Parsing Calculation in Background thread


if (appDelegate4.globalParsingCompletedFlag==@"0")
{
    NSLog(@"starting backgroung thread- parsing calulation- because flag==0");

    ParsingCalculation *parsC = [[ParsingCalculation alloc] init];
    [queue addOperation:parsC];
    [parsC performSelectorInBackground:@selector(main) withObject:nil];

    [parsC release];
    //successfully starts parsing in background 
    }
}

Код файла ParsingCalculation.m

- (void)main {


NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
 //your code to do the operations...

appDelegate5=[[[UIApplication sharedApplication] delegate] retain];


NSLog(@"Now we are in ParsingCalulation.m");

  //resultsFromURL is another method in parsingCalulation.m that does all parsing successfully
[self resultsFromURL:appDelegate5.globalLocationURL];

NSLog(@"Now we are moving back in Five.m -calling function removeProgressInd ");

[[Five shared] performSelectorOnMainThread:@selector(removeProgressInd) 
                                  withObject:nil
                               waitUntilDone:YES];

//it returns back to five.m successfully after finishing HTML Parsing


[pool release];

}

Five.m - метод removeProgressInd

-(void) removeProgressInd{

NSLog(@"Now we are back in Five.m -in function removeProgressInd ");


        //remove progressInd from superview as parsing calculation has been completed


        [progressInd stopAnimating];

        [self.progressInd removeFromSuperview];


//move to TitleOnly.m tableview         

        NSLog(@"navigate to TitleOnly ");

    TitleOnly *newView = [[TitleOnly alloc] initWithNibName:@"TitleOnly" bundle:nil];

    [self.navigationController pushViewController:newView animated:YES];

    [newView release];


}

Я вижу сообщение «перейти к TitleOnly» в консоли без ошибок, это означает, что оно запустило [progressInd stopAnimating] и [self.progressIndкоманды removeFromSuperview] успешно выполнены без каких-либо ошибок, поскольку эти команды находятся непосредственно перед этим сообщением NSLog.Но он не удаляет индикатор прогресса с экрана.Точно так же это не показывает TitleOnly tableview.''

Как я могу это исправить?в чем проблема?Что я делаю неправильно?

Пожалуйста, ответьте как можно скорее.

1 Ответ

0 голосов
/ 05 августа 2011

Вы пробовали , используя точки останова и отладчик для решения проблемы ? Вы узнаете намного больше о том, что происходит в этом направлении, в отличие от использования NSLog().

...