2009-06-21 2 views
0

iPhone OS 응용 프로그램 내에서 서버의 .php 파일에서 데이터를 검색하려고합니다. 하나의 방법에서, 나는 다음과 같은 코드를 사용 :-iitWithContentsOfURL에 대한 앱 대기 시간 : 웹 데이터를 검색 하시겠습니까?

NSString *aString = [[NSString alloc] initWithContentsOfURL:aURL encoding:anEncoding error:nil]; 

//See what I got 
NSLog(aString); 

내가 너무 빨리 나는 데이터 요청이 증발 한 것으로 충분한 시간이 있었다는 것을 의심 코드를 통해이 앱처럼 보인다 앱 실행을 실행합니다. 결과 문자열은 완전히 비어 있으며, 이는 나의 의심을 더 뒷받침합니다. 여기서 무슨 일이 일어나고있는거야? 앱이 -initWithContentsOfURL이 내 서버의 .php 파일에서 데이터를 검색하기를 기다리지 않고 있습니까? 앱이이 메소드를 기다리지 않는 경우 다음 요청으로 이동하기 전에 요청을 대기하는 방식으로 데이터 요청을 수행하는 데 사용할 수있는 또 다른 메소드가 있습니까?

(나는 또한있는 NSURLConnection에 조금 읽은? -이 어쩌면이다 내가 -initWithContentsOfURL 대신에보고해야한다 무엇을)

+0

데이터를 가져 오는 동안 메소드 호출이 다음 명령문으로 점프하기 전에 대기해야합니다. 브라우저에서 URL을 호출 해보고 어떤 데이터를 얻었는지 확인 했습니까? 응답의 헤더 정보에있는 content-type이 맞습니까? 어쩌면 당신은 NSData 대신에 그것을 가져 와서 NSData로부터 문자열을 얻어야 만 하는가? – lostInTransit

답변

3

있는 NSURLConnection 웹에서 파일을 얻기에 좋은 곳입니다 ... 그것은 아무튼 ...

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

데이터가 수신되었을 때 데이터가 완전히 다운로드 된 때 통지 할 수 있도록 'T는 그 자체하지만 대리인 콜백을 "대기". 이렇게하면 데이터가 들어올 때 App show (원하는 경우) UIProgressBar를 표시 한 다음 완전히 수신되었을 때 원하는대로 파일을 처리 할 수 ​​있습니다.

+4

NSURLConnection을 사용하는 호출의 경우 및 비동기 호출을 수행하는 경우에만 이러한 메서드가 호출됩니다. initWithContentsOfURL :은 동기 호출을합니다. – lostInTransit