2012-04-16 180 views
-1

在我的应用程序中,我需要调用一个函数,该函数依次调用许多函数。问题是我打电话给getweather函数,它启动startprocess,然后过程完成。 processCompleted方法由rssparser调用,该值在processCompleted方法的末尾可用。等待函数返回值

-(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方法的返回值,因为我已经叫getWeather功能。

回答

1

在Objective C,就像在任何结构化语言,当你调用返回像

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

不执行下一个指令,直到函数返回值的值的函数。换句话说,在yourFunction结束并为x返回一个值之前,somethingElse不会被执行。

+0

是否已编辑该问题。请检查一下。 – 2012-04-16 09:46:21

+0

我的答案保持不变,请仔细阅读,您没有使用任何选择器或后台线程,因此总是获取返回的值,无需同步这些函数。 – 2012-04-16 13:52:11

0

如果你的函数链被称为主线程,您的应用程序应该自动在继续执行下一个操作之前,等待进程结束。然后,你不需要做任何事情来获得你的目标。

请注意,如果您的程序非常繁重,您的应用程序将冻结,直到结束。这是一个很好的自定义执行过程,可以阻止你的应用程序在另一个线程。