2014-10-07 1 views
-1

iOS 용 Google Places API를 사용하고 있습니다. 자동 완성 함수를 만드는 중입니다.이 단추는 4 개의 단추 (이 질문과 관련이없는 이유로)에 제안을 넣겠습니다. 사용자 입력이 특정 길이에 도달하면 응용 프로그램이 충돌합니다. 이 경우, _pred1, _pred2, _pred3에서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]; 

, _pred4 내 버튼이 있고 _textField은, 분명히, 사용자 입력이 입력되고있는 텍스트 필드 다음과 같이 내 코드입니다. 이 코드는 - (IBEvent) editChange 메소드 내에 있습니다. 코드가 작동하고 자동 완성 예측이 버튼 제목을 채 웁니다.

내 문제는 내가 특정 길이의 문자열을 입력하면, 나는 다음과 같은 오류 메시지가 나타날 것입니다 :

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)' 

내 가정은 입력 문자열이 길어지면, 예측의 수가 너무 단축,이다 후기의 제목에는 넣을 내용이 없습니다. 그러나 반환 된 예측 수가 줄어들면 앱이 중단되는 것을 방지하는 방법을 모르겠습니다.

도움을 주시면 감사하겠습니다.

+0

당신이 존재하지 않는 요소를 가리키고 있습니다. 키 @ "예측"에 대한 객체가 x 위치에 유효한 값을 가지고 있는지 확인하십시오. –

+0

오브젝트가 == nil이고 텍스트 만 변경하면 조건을 추가하려고했습니다 아니지만 여전히 오류가 발생합니다. – JayB127

+0

왜 JSON 사전을'json'이라는 변수에 넣었습니까?'_json'이라는 다른 변수를 사용하여 버튼 제목을 설정 했습니까? 그리고 왜 [[_json objectForKey : @ "predictions"]'를 네 번 호출합니까? 한 번 호출하고 결과를 변수에 저장하십시오. 그런 다음 변수의 길이를 확인하고 변수를 다시 사용할 수 있습니다. – rmaddy

답변

0

당신은 등, objectAtIndex:1,objectAtIndex:0있는지 여부를 확인 처음 봐 먼저 보지 않고 ...

[_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]; 

을 말하고있다.

+0

오브젝트가 == nil이고 텍스트가 아닌 경우에만 변경하는 조건을 추가하려고 시도했지만 여전히 오류가 발생합니다. – JayB127

+0

개체가 nil인지 여부는 아닙니다. NSArray에 nil을 넣을 수는 없습니다. 그것은 인덱스 카운트가 그렇게 높은 지 여부입니다. 인덱스 '0'을 넘지 않는 배열에서 인덱스 '1'에있는 오브젝트를 말할 수 없습니다. – matt

+0

NSArray 문서는 다음과 같습니다. https://developer.apple.com/library/IOS/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/index.html – matt

관련 문제