UIView и UITableView, reloadData странная задержка

У меня есть что-то странное с перекрашиванием моего контроллера вида. Контроллер представления содержит UITableView и спиннер.

у меня естьupdateFeed функция (запущенная IBOutlet), которая приноситволчок перед моим видом контроллера и ставитdoUpdate функция в NSOperationQueue.

- (void)updateFeed {
    [self showMuar];
    ResourceLoader *loader = [ResourceLoader sharedResourceLoader];
    [loader updateFeed:[self feed] forDelegate:self];
    isReloading = YES;
}
- (id<ResourceToken>)updateFeed:(Feed *)feed forDelegate:(id)delegate {
     return [self queueOperation:[[Operation alloc] initWithObject:feed withSelector:@selector(doUpdate) delegate:delegate]];
}

doUpdate функция вызываетсинтаксический анализатор (startParserWithAdd :) функция, которая извлекает контент из Интернета и форматирует его для UITableView, а затем выполняет[tableView reloadData].

- (NSError *)doUpdate {
    [self startParserWithAddThreaded:NO];
    return nil;
}
- (void)startParserWithAddThreaded:(BOOL)add {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    [self startParserWithAdd:add];
    [pool release];
}

... где-то в функции парсера (startParserWithAdd :)

[tableView setDataSource:self];
[tableView reloadData];

ОднаждыdoUpdate сделано без ошибок и благодаря моему классу операцийloadingResourceDidFinish выполняется в моем представлении контроллера.loadingResourceDidFinish Отправитьволчок в фоновом режиме.

- (void)loadingResourceDidFinish:(Feed*)f {
    isReloading = NO;
    [self loadingResourceDidFinishPostAction];
}
- (void)loadingResourceDidFinishPostAction {
        [self hideMuar];
}
- (void)hideMuar {
    [loadingIndicator stopAnimating];
    [self.view sendSubviewToBack:muar];
}

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

Чтобы быть точным, muar - это UIView с непрозрачностью, который содержит счетчик. Я просто хотел абстрагироваться от сложности в своем первоначальном объяснении!

Я попытался NSLog это, и кажется, что ничего не перекрашивается, пока reloadData не будет завершена. Я думаю, что это проблема перекраски, потому что, если я поверну свой iPhone в пейзаже сразу после окончанияloadingResourceDidFinish, все хорошо, вертушка исчезает.

Я пытался удалить NSAutoreleasePool всинтаксический анализатор функция, но не меняется.

Я, конечно, что-то неправильно понял, но я не знаю, что это ...

редактировать

Я изменил код, чтобы сделать его менее запутанным. ReloadData UITableView теперь находится здесь:

- (void)loadingResourceDidFinishPostAction {
    [tableView reloadData];
    [self hideMuar];
    NSLog(@"loadingResourceDidFinishPostAction end");
}

И для отладки:

- (UITableViewCell *)tableView:(UITableView *)_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"cellForRowAtIndexPath %i", indexPath.row);
        ...

Так почему же первая ячейка перекрашивается только через 5 секунд после окончания загрузки ResourceDidFinishPostAction?

2010-09-02 10:15:35.279 myapp[9632:5b03] loadingResourceDidFinishPostAction end
2010-09-02 10:15:40.208 myapp[9632:5b03] cellForRowAtIndexPath 0
2010-09-02 10:15:40.697 myapp[9632:5b03] cellForRowAtIndexPath 1
2010-09-02 10:15:40.878 myapp[9632:5b03] cellForRowAtIndexPath 2

То же самое происходит с моим iPhone 3G и симулятором iPhone 4.

Ответы на вопрос(2)

Ваш ответ на вопрос