2011-04-21 3 views
1

서버에서 내 iPhone 앱으로 데이터를 가져옵니다."JSONValue failed"서버에서 iPhone으로 데이터를 가져 오는 중에 오류가 발생했습니다.

서버에서 데이터를 가져 오는 경우 HTTP POST 메서드를 사용하고 얻은 데이터를 구문 분석하기 위해 SBJSON 파서를 사용하고 있습니다.

내 앱이 처음 실행될 때 데이터가 가져 오지 않습니다.

콘솔에 다음과 같은 실패 로그가 표시됩니다. 응용 프로그램은 충돌하지 않지만 데이터는 가져 오지 않습니다.

<html>Your request timed out. 
Please retry the request.                         </html> 
2011-04-21 08:39:06.339 Hive[1594:207] -JSONValue failed. Error trace is: (
    "Error Domain=org.brautaset.JSON.ErrorDomain Code=3 \"Unrecognised leading character\" UserInfo=0x4cabe90 {NSLocalizedDescription=Unrecognised leading character}" 
) 

앱이 두 번째 이후부터 올바르게 데이터를 가져옵니다. 앱이 처음 실행될 때만이 오류가 발생합니다.

무엇이 잘못 될 수 있습니까?

+0

귀하의 요청 시간이 초과되었습니다.. 이 응답 문자열이 서버에서 오는 것입니까? 그렇다면 처음으로 JSON 응답을받지 못합니다 (문제는 처음 만 발생한다고 말함). – Ravin

+0

다른 클라이언트 (예 :'curl (1)')에서이 동작을 재현 할 수 있는지 확인하십시오. 그것은 서버 문제처럼 보입니다. –

+0

@Ravin : 그래, 알아. 하지만 왜 그런 일이 일어날 수 있습니까? – meetpd

답변

0

서버의 리소스를 분석하지 않으면 서버가 응답하는 데 너무 오랜 시간이 걸리는 이유를 파악하기 어렵습니다.

마지막으로 JSON 시도를 할 때부터 다음 번에 "처음 시도"할 때까지 얼마나 시간이 걸릴지 생각해보십시오. 어쩌면 당신이 웹 브라우저를 사용하여 그것을 재현하는지보십시오.

서버가 프로덕션 품질의 서버입니까? 그렇지 않은 경우 첫 번째 응답에 너무 오래 걸리는 첫 번째 요청에 응답하기 위해 "회전"할 수 있습니다.

개인적으로 실패 재시도 옵션이있는 일반 JSON 피드 클래스를 작성했습니다. JSON이 없거나 유효하지 않은 JSON을 받으면 전달한 시간을 기준으로 y 초 간격으로 x 번 다시 시도합니다. 처음에는 조금 더 많은 작업이 필요하지만 두 가지 이유 때문에 성과를 거둘 수 있습니다.

1) Terente의 좋은 제안을 단일 파일로 만들 수있는 것처럼 ASIHTTRequest를 사용하는 것과 같은 반복적 인 재사용과 업데이트가 가능합니다.

2) 응답이 실패 할 것으로 예상하지는 않지만 서버 속도가 느려지거나 네트워크 문제가 발생하여 응답이 잘못 될 수 있습니다.

0

ASIHTTRequest을 사용할 수 있으며 시간이 초과되면 서버에 새 요청을 보내보십시오.

관련 문제