В моем проекте у меня есть следующие методы:методы называются перед другими закончены
-(NSArray*)getWindSpeed
{
[client setURL:@"windspeed"];
NSLog(@"Wind speed asked");
[client getData];
return [self Parse];
}
-(NSArray *)Parse
{
NSLog(@"parsing");
return [parser parseJSONData:rawData];
}
Когда getWindSpeed называется, он первым изменяет URL в HTTPClient я сделал, а затем запрашивает данные. В методе getData клиента я делаю httprquest, и когда он получает данные, он хранит данные в массиве. Затем я хочу вернуть проанализированные данные. Однако метод Parse вызывается до того, как функция getData моего клиента завершена.
Таким образом, исходные данные, которые принимает парсер, всегда равны нулю.
Я предполагаю, что это происходит потому, что [сами Анализировать] вызываются до клиента
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
So..any советы о том, как я могу сделать это так [сам Анализировать] не не дозвонились до данных получено?
Звонок getData является асинхронным, поэтому вызов [self parse] сразу после того, как он не будет работать, как вы сказали. Также, как вы намекали, вы должны реализовать метод делегирования didReceiveData, и вам нужно было проанализировать данные с сервера. –
@hugo точно, но когда я анализирую данные в didReceiveData, тогда запрос будет вызван до разбора, чтобы проблема осталась. – Aelion
Из-за характера синхронных запросов у вас не может быть метода с подписями '- (NSArray *) getWindspeed' вам нужно будет использовать что-то вроде' - (void) startWindSpeedRequest', а затем использовать делегирование или целевое действие, чтобы уведомить кого когда-либо пересекается в скорости ветра после того, как данные загружены с сервера. –