2012-04-16 5 views
-1

제 애플리케이션에서 함수를 호출해야합니다. 함수를 호출하면 여러 함수가 호출됩니다. 문제는 getweather 함수를 호출하고 startprocess을 시작한 후 프로세스가 완료된 것입니다. processCompleted 메서드는 rssparser에 의해 호출되며 값은 processCompleted 메서드 끝에서 사용할 수 있습니다. 나는 getWeather 기능이라고 때문에함수가 값을 반환하기를 기다리는 중

-(void) getWeather: (NSDictionary *) dictionary { 
    _rssParser = [[BlogRssParser alloc]init]; 
    self.rssParser.address = addressInterestedIn; 
    self.rssParser.delegate = self; 
    [[self rssParser]startProcess]; 
} 

//Delegate method for blog parser will get fired when the process is completed 

-(void)processCompleted 
{ 
    NSLog(@"the rssItems array is %@", [[[self rssParser]rssItems] description]); 
    int woeid = [[[[self rssParser] rssItems] objectAtIndex:0] intValue]; 
    // get weather update from yahoo 
    NSLog(@"temperature option %d", [[[NSUserDefaults standardUserDefaults] objectForKey:@"temperature"] intValue]); 
    SCYahooWeatherParser *parser = [[SCYahooWeatherParser alloc] initWithWOEID:woeid weatherUnit: [[[NSUserDefaults standardUserDefaults] objectForKey:@"temperature"] intValue]]; 
    //parse the returned xml from yahoo 
    SCWeather *result = [parser parse]; 
    [parser release]; 
    NSLog(@"the conditionDataDict is %@", [result.conditionDataDict description]); 
} 

어떻게는 processCompleted 메소드에 의해 반환되는 값을받을 수 있나요. 다만 어떤 구조화 된 언어로 같은 목적 C에서

답변

1

, 당신은 함수가 값을 반환 할 때까지 다음 명령이 실행되지 않습니다

NSInteger x = [self yourFunction]; 
[self somethingElse:x]; 

에 같은 값을 반환하는 함수를 호출 할 때. 즉, somethingElse는 yourFunction이 종료되고 x 값을 반환 할 때까지 실행되지 않습니다.

+0

질문이있는 경우 편집하십시오. 그것을 확인하십시오. –

+0

내 대답은 동일하게 유지됩니다. 선택기 나 백그라운드 스레드를 사용하지 않으므로 항상 읽으십시오. 반환 값은 항상 얻어 지므로 함수를 동기화 할 필요가 없습니다. –

0

다음 방법을 사용하여 waitUntilDone을 ​​Yes로 전달할 수 있습니다. 그것은 complete-하는 함수를 기다리는 사용할 수 좀 더 방법은 당신이 NSObject의 클래스를 참조 할 수있다

performSelectorOnMainThread:withObject:waitUntilDone: 

- 기능 귀하의 체인이 메인 쓰레드에서 호출하면 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html

0

앱이 자동으로해야 프로세스가 끝나기를 기다렸다가 계속해서 다음 작업을 실행하십시오. 그런 다음 목표를 달성하기 위해 아무 것도 할 필요가 없습니다.

프로세스가 매우 무거울 경우 앱이 끝날 때까지 고정됩니다. 다른 스레드에서 응용 프로그램을 차단할 수있는 좋은 사용자 지정 실행 프로세스입니다.

관련 문제