Я разрабатываю приложение, которое связывается с сервером RESTful, чтобы получить некоторые данные, а затем с возвращенным ответом JSON для отображения этих данных.Проверьте блок GCD, так как процесс async занимает некоторое время
Использование вызовов UniRest и все работает хорошо. Главный вызов - «runUnirestRequest»
Узел вызова uni - это вызов для асинхронного GCD. Моя проблема заключается в том, что, поскольку я тестирую локально, вызов так быстро, что я не вижу индикатор активности. Он просто исчезает, прежде чем я смогу это увидеть.
Блок GCD возникает в режиме viewController viewDidLoad.
Что мне нужно для достижения: Попросите асинхронный unirest-вызов занять несколько секунд, чтобы имитировать ответ сервера медленным (не хотите, чтобы на самом деле останавливать приложение iOS на своих дорожках).
Прошу прощения за любые ошибки кодирования/вредные привычки, только делайте объективный c в течение недели, но я счастлив за любой дополнительный конструктивный крит. :)
Я попытался
sleep(5); // But bad idea as far as I can see.
также попытался
[NSThread sleepForTimeInterval:5.0]; // but this doesn't seem to do anything.
viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
[self createActivityIndicator];
NSLog(@"viewDidLoad");
NSLog(@"viewDidLoad->thread: %@", [NSThread currentThread]);
[messageLabel setText:@""];
unirestQueue = dispatch_queue_create("com.simpleweb.pbs.dayDataUnirestRequest", NULL);
// Do any additional setup after loading the view from its nib.
daySalesFigures = [[PBSDaySales alloc] init];
responseVal = [[HttpJsonResponse alloc] init];
// Use Grand Central Dispatch to run async task to server
dispatch_async(unirestQueue, ^{
[self runUnirestRequest:self.requestUrl];
});
dispatch_after(unirestQueue, dispatch_get_main_queue(), ^(void){
[activityIndicator stopAnimating];
});
}
runUniRestRequest функции
- (void) runUnirestRequest:(NSString*)urlToGet
{
[NSThread sleepForTimeInterval:5.0];
NSLog(@"runUnirestRequest called");
HttpJsonResponse* response = [[Unirest get:^(SimpleRequest* request) {
[request setUrl:@"http://x.x.x.x:9000/Sales/Day/2013-02-14"];
}] asString];
NSString *jsonStr = [response body];
SBJsonParser *jsonParser = [SBJsonParser new];
id response2 = [jsonParser objectWithString:jsonStr];
[self deserializeJsonPacket:(NSDictionary*)response2];
}
Просто примечание: Unirest - это всего лишь обертка вокруг «NSURLConnection», использующая исключительно _synchronous удобный_ метод 'sendSynchronousRequest: returnResponse: error:'. Это даже без уважительной ошибки. Хотя API довольно привлекателен, реализация - напротив - сомнительна. Надеюсь, что реализация будет улучшена. Итак, на данный момент вы немного ограничены субоптимальной реализацией: нет обработки ошибок, нет реального подхода к асинхронному общению, нет пользовательской проверки подлинности, нет больших тел данных ... и еще пара № – CouchDeveloper