У меня проблема с получением данных с веб-сайта на устройство iOS. Сеть использует php-файл для чтения некоторых данных из базы данных mySQL. Затем он отправляет данные обратно в формате JSON.
Я использую следующий код для получения данных. Код помещается в viewDidLoad. Чтобы избежать выполнения кода, связанного с пользовательским интерфейсом, без ожидания веб-ответа, я помещаю операции NSURLRequest / NSURLConnection в асинхронную очередь с GCD. Тем не менее, окно консоли отображает NSLog, что self.connectionData не имеет данных.
Этот результат такой же, как я поместил операции NSURLRequest / NSURLConnection непосредственно в функцию viewDidLoad. Вы знаете, что здесь не так, и почему я не могу получить данные?
Когда я запускаю php прямо из браузера, веб-сервис работает нормально.
Большое спасибо!
С Уважением,
Павел
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(concurrentQueue, ^{
dispatch_sync(concurrentQueue, ^{
NSString *urlAsString = @"http://www.myexamplesite.com/loadProgram.php";
NSURL *url=[NSURL URLWithString:urlAsString];NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:30.0F];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue: queue
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if ([data length]>0 && connectionError == nil) {
[self.connectionData appendData:data];
NSLog(@"datalength is %ld", [self.connectionData length]);
NSString *retString = [[NSString alloc] initWithData:self.connectionData encoding:NSUTF8StringEncoding];
NSLog(@"json returned: %@ <end>", retString);
}
else if ([data length]==0 && connectionError ==nil)
{NSLog(@"Nothing was downloaded!");
}
else if (connectionError != nil){
NSLog(@"Error happend = %@", connectionError);
}
}];
});
});
}
Вы не инициализируете self.connectionData
, Итак, вам понадобится следующий кусок в начале:
if (!self.connectionData) {
self.connectionData = [[NSMutableData alloc] init];
}
Других решений пока нет …