2011-09-09 6 views
0

저는 실제 장치 (iPad)에서 실행되는 앱에서 iOS를 처음 사용하고 작업하고 있습니다. 따라서보기가 표시된 후에 iPad에서 내 앱을 실행하면 앱이 웹 서버 나 무언가 (사용자 상호 작용 없음)를 폴링하고 HTTP를 통해 정보를 얻을 수 있어야하며이 정보를 기반으로 일부 텍스트를 채우기를 원합니다. 앱보기의 입력란 iOS에서 이와 같은 작업을 수행 할 수 있는지 알려주실 수 있습니까? 그렇다면 어떻게 그리고 몇 가지 샘플 코드가 많은 도움이 될 것입니다.앱 시작시 외부 서버 폴링

감사합니다.

답변

0

viewWillAppear 또는 viewDidLoad에서 NSURLConnection을 사용하여 http를 통해 정보를 다운로드 할 수 있습니다. NSXMLParser (또는 iOS 용 다른 XML 파서)를 사용하여 XML을 구문 분석하면 데이터를 다운로드 한 후

//Lets say you have download and process method 
- (void)downloadAndProcess 
{ 
    //URL you want to download Info from 
    NSURL* url = [NSURL URLWithString:@"http://google.com"]; 
    //Make a mutable url request 
    NSMutableURLRequest* req = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60]; 
    NSURLConnection* conn = [NSURLConnection connectionWithRequest:req delegate:self]; 
    if(conn) 
    { 
     //NSMutableData receivedData is an instance variable 
     receivedData = [[NSMutableData alloc] init]; 
    } 
} 

//NSURLConnection Delegate methods here 
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    [receivedData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [receivedData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    NSLog(@"Error downloading data :%@",[error localizedDescription]); 
    // release receivedData object when connection fails 
    [receivedData release],receivedData = nil; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    // Connection did finish downloading data which you can process based on what your data is 
    // release receivedData object once you are done processing it. 
    [receivedData release],receivedData = nil; 
} 
+1

답장을 보내 주셔서 감사합니다. 메소드 viewWillAppear 및 viewDidLoad는 실제로 앱이 사용자 상호 작용을 위해 준비되기 전에 실제로 호출됩니다. 그러나 특정보기가로드 될 때이 프로세스를 시작하는 방법이 있습니다 (실제로 디바이스에서 앱보기를 볼 수 있음). 사용자 상호 작용 준비. 따라서이 특정보기가 응용 프로그램에로드 될 때 항상 정보를 폴링하고 페이지의 필드를 계속 업데이트합니다. 내가 잘못 대답했는지 해석하면 나를 바로 잡아라. – Teja

+0

ViewController B (앱에 View Controller A, B, C가 Nvigation 컨트롤러에로드 된 경우 A는 nav 컨트롤러의 루트보기 컨트롤러입니다.) A에서 B 및 C로 탐색 할 수 있고 B 또는 C에서 탐색 할 수 있습니다 A로 돌아 가기) 현재보기 사용자가 A 또는 C를보고 있는지 여부와 상관없이 B보기 컨트롤러가 탐색 컨트롤러에로드되면 폴링을 시작 하시겠습니까? 그게 니가 원하는거야 – 0x8badf00d

+0

아니, 내가 내 애플 리케이션을 시작하고 첫 번째 (루트)보기 시나리오를 고려해 보라 지금이 폴링 작업 후에 정보를 폴링하려는 사용자는 B, C ... 그리고 그가 올 때마다 갈 수있다. A로 돌아 가면이 정보를 다시 조사해야합니다. 만약 당신이 혼란스러워서 미안. – Teja

관련 문제