UIActivityIndicatorView NSURLConnection, вид не отображается

#ios #nsurlconnection #uiactivityindicatorview

#iOS #nsurlconnection #uiactivityindicatorview

Вопрос:

У меня проблема с отображением UIActivityIndicatorView, когда я собираю данные с сервера с помощью запроса NSURLConnection.

Запрос, я думаю, является асинхронным, то есть запущен в новом потоке. Я скопировал из примера AdvancedTableViewCells от Apple. И я запускаю его в XCode в симуляторе iOS 4.3 для iPhone. Я еще не тестировал это на реальном iPhone.

Также я погуглил эту проблему и перепробовал множество предложений, но такое ощущение, что я забыл что-то основное. Ниже приведен мой код из класса RootViewController.

Я просто выбираю строку, создаю и добавляю activityview, запускаю анимацию, а затем создаю объект NSURLConnection, который, я полагаю, начинает извлекать данные с сервера в другом потоке.

Есть идеи?

 @interface RootViewController : UITableViewController {
    NSMutableData *receivedData;
    UIActivityIndicatorView *activityView;
}

@end

...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // In my rootviewcontroller
    activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];

    [self.view addSubview:activityView];
    [activityView startAnimating];
    …

    NSMutableURLRequest *tUrlRequest = [tQuery createUrlRequest:tStatId];
    NSURLConnection *tConnectionResponse = [[NSURLConnection alloc] initWithRequest: tUrlRequest delegate: self];

    if (!tConnectionResponse) {
        NSLog(@"Failed to submit request");
    } else {
        NSLog(@"Request submitted");
        receivedData = [[NSMutableData data] retain];
    }
    return;
}

...

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);

    NSXMLParser *tParser = [[NSXMLParser alloc] initWithData: receivedData];
    ...

    [tParser parse]; 
    ...

    [connection release];
    [receivedData release];

    [NSThread sleepForTimeInterval: 2.0]; // Just to see if activity view will show up...

    NSUInteger row = 1;  
    if (row != NSNotFound) 
    { 
        // Create the view controller and initialize it with the 
        // next level of data. 
        VivadataTViewController *vivaViewController = [[VivadataTViewController alloc] init];

        if (activityView != nil) {
            [activityView stopAnimating];
        }
    }
}
  

Комментарии:

1. Извините… это был белый avtivityview на белом фоне. Ужасно извиняюсь.

2. здорово, что вы решили эту проблему. однако, если вы ответите на свой собственный вопрос и примете ответ, поток будет помечен как «отвеченный», и другие также могут извлечь из этого выгоду.

Ответ №1:

Возникла точно такая же проблема, попробуйте изменить цвет UIActivityIndicatorView в инспекторе атрибутов -> Style на серый

введите описание изображения здесь