Я использую API Google Адресов для iOS. Я работаю над созданием функции автозаполнения, и я помещаю предложения в 4 кнопки (по причинам, которые не имеют отношения к этому вопросу), но я замечаю, что, как только пользовательский ввод достигнет определенной длины, сбои приложений. Мой код выглядит следующим образом:Почему мое приложение вылетает, когда текст UITextField достигает определенной длины?
_request = [[NSMutableURLRequest alloc]init];
_escapedUrlString = [_textField.text stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding
_requestURL = [NSString stringWithFormat: @"https://maps.googleapis.com/maps/api/place/autocomplete/json?input=%@&key=mykey",_escapedUrlString];
[_request setURL: [NSURL URLWithString:_requestURL]];
[_request setHTTPMethod:@"GET"];
NSURLResponse *requestResponse;
_requestHandler = [NSURLConnection sendSynchronousRequest:_request returningResponse:&requestResponse error:nil];
_requestReply = [[NSString alloc]initWithBytes: [_requestHandler bytes] length: [_requestHandler length] encoding: NSASCIIStringEncoding];
_data = [_requestReply dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:_data options:0 error:nil];
[_pred1 setTitle: [[[_json objectForKey:@"predictions"] objectAtIndex:0]objectForKey:@"description"] forState: UIControlStateNormal];
[_pred2 setTitle: [[[_json objectForKey:@"predictions"] objectAtIndex:1]objectForKey:@"description"] forState: UIControlStateNormal];
[_pred3 setTitle: [[[_json objectForKey:@"predictions"] objectAtIndex:2]objectForKey:@"description"] forState: UIControlStateNormal];
[_pred4 setTitle: [[[_json objectForKey:@"predictions"] objectAtIndex:3]objectForKey:@"description"] forState: UIControlStateNormal];
В этом случае, _pred1, _pred2, _pred3, _pred4 мои кнопки и _textField, очевидно, текстовое поле, где ввод пользователя вводимое. Этот код находится в методе editChange - (IBEvent). Код работает, и предсказания автозаполнения заполняют названия кнопок.
Моя проблема заключается в том, что когда я ввожу строку определенной длины, я получаю следующее сообщение об ошибке:
2014-10-07 16:21:48.740 maptest[41319:529100] *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (1) beyond bounds (1)'
Мое предположение состоит в том, как входная строка становится больше, число предсказаний укоротить, так нет ничего, чтобы включить в более поздние заголовки. Тем не менее, я не знаю, как остановить приложение от сбоя, как только количество возвращаемых прогнозов уменьшится.
Любая помощь приветствуется.
вы указываете на несуществующий элемент, убедитесь, что объект для ключа @ «предсказания» имеет допустимое значение в позиции x –
Я попытался добавить проверку состояния, если объект == nil и только изменение текста, если оно не было, но я все еще получаю ошибку. – JayB127
Почему вы помещаете словарь JSON в переменную с именем 'json', но затем использовали другую переменную с именем' _json' для установки названий кнопок? И почему вы называете '[[_json objectForKey: @" прогнозы "]' четыре раза? Вызовите его один раз и сохраните результат в переменной. Затем вы можете проверить его длину и повторно использовать переменную. – rmaddy