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

У меня есть страница входа в систему, когда я нажимаю кнопку «Войти», я должен вызвать веб-службу и загрузить новое представление в соответствии с ответом, который занимает от 3 до 4 секунд, я хочу показать индикатор активности для загрузки представления

как это показать

я использую асинхронный NSURLConnection с делегатами NSURLConnection

NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
[conn start];

in didFinishLoading

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

NSError *e = nil;
res = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&e];

//[indicator performSelectorOnMainThread:@selector(stopAnimating) withObject:nil waitUntilDone:YES];

NSLog(@"data is %@",res);
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"create.json"];

NSLog(@"file path is %@ ",path);

NSFileManager *fileManager=[NSFileManager defaultManager];

if(![fileManager fileExistsAtPath:path])
{

    NSString *bundle = [[[NSBundle mainBundle]resourcePath]stringByAppendingString:@"create.json"];

    [fileManager copyItemAtPath:bundle toPath:path error:&error];
}


[res writeToFile:path atomically:YES];

как показать в этом представлении

я застрял здесь


person user3595019    schedule 22.12.2014    source источник
comment
В iOS SDK нет представления загрузчика, есть только UIActivityIndicator, который можно поместить в любой UIView. Вы можете сделать вид загрузчика самостоятельно или использовать для него пользовательские элементы управления. Пример: github.com/TransitApp/SVProgressHUD   -  person evnaz    schedule 22.12.2014


Ответы (1)


В @interface добавьте:

@property (nonatomic, strong) UIActivityIndicatorView *ai;

Когда вы начнете свое соединение, запустите свой счетчик:

NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
[conn start];
_ai = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
_ai.frame = CGRectMake(0, 0, 24, 24); // adjust the frame to where you want the spinner to appear
[_ai startAnimating];
[self.view addSubview:_ai];

И когда ваше соединение завершится, удалите его:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    [_ai stopAnimating];
    [_ai removeFromSuperView];

    ... // all your other code
}

Убедитесь, что вы удалили его таким же образом и в обратном вызове connectionDidFailWithError:. Если вы хотите что-то более красивое, проверьте ссылку на github, опубликованную @evnaz, и используйте ее вместо UIActivityIndicatorView с тем же потоком.

person Chris    schedule 22.12.2014