2009-07-30 5 views
0

를 완료하기 위해 대기 :코코아의 배열을 반환하지만, 대표단은 내가 코코아에 다음과 같은 방법을 만든

-(NSArray *)latestData 
{ 
    NSURL *requestingURL = [NSURL URLWithString:@"someRestfulURL"]; 

    NSMutableURLRequest *theRequest =[NSMutableURLRequest requestWithURL:requestingURL]; 
    [theRequest setHTTPMethod:@"GET"]; 

    NSURLConnection *theConnection = [NSURLConnection connectionWithRequest:theRequest delegate:self]; 

    if(theConnection) 
    { 
     webData = [[NSMutableData data]retain]; 
    } 
    else 
    { 
     NSLog(@"the connection is NULL"); 
    } 
    return someArray; 
} 

평온한 웹 서비스를 내가 NSXMLParser를 사용하여 구문 분석 반환 XML을 호출하고있다.

적절한 데이터로 배열을 채우기 전에 NSURLConnection 및 NSXMLParser 대리자 메서드가 완료 될 때까지 기다릴 필요가있는 경우 latestData을 호출 할 때 배열을 반환 할 수 있습니까?

답변

1

할 수있는 일 몇 가지가 있습니다 1. 요청을 동기식으로 만드십시오.이 방법으로 반환 할 때 배열을 갖게됩니다. 2. 비동기로 만들려면 배열을 반환하는 대신 클래스 멤버로 배열을 가져온 다음 finishedRequest 대리자 메서드에 채 웁니다.

+0

동기식 요청 호출을하면 NSData가 반환되지만이 데이터를 파서에 전달하고 메서드 내에서 배열을 반환 할 수 있다는 것을 알고 있습니다 ?? – zpesk

+0

응답을 XML 또는 Json으로 가정하면 [[NSString alloc] initWithData : encoding :]을 수행하여 텍스트를 다시 얻을 수 있습니다. 그런 다음이를 구문 분석 할 수 있습니다. – Daniel

+0

간단히 말해서 NSString * 응답 = [NSString stringWithContentOfURL : url] 귀하의 도움을 동등한 – Daniel

1

[NSXMLParser parse]는 구문 분석이 끝날 때까지 반환되지 않으므로 원하는 동작이 이미 있고 NSURLConnection에는 동기 요청의 경우 sendSynchronousRequest : returningResponse : error :가 있습니다.

주 스레드에서이 작업을 실행하는 경우 네트워크 요청의 UI를 차단하면 사용자 경험이 좋지 않을 수 있으므로 대신 비동기로 만들 수 있는지 여부를 실제로 고려해야합니다.

+0

나는 그것을 비동기 적으로 수행하고 여전히 배열을 반환합니까 ?? 나는이 메소드를 클래스 요청으로 가지고 있는데, 위의 메소드의 배열에 대해 클래스 레벨 변수가 실제로 실행 가능합니까 ?? – zpesk

+0

대리자 인수를 사용하고 대리자가 배열을 사용하는 알려진 콜백 메서드를 구현하도록합니다. – smorgan

+0

어떻게이 일을하겠습니까 ?? 코드 예제가 있습니까? 나를 제공합니까 ?? – zpesk

관련 문제