等待函数返回值

时间:2012-04-16 09:29:43

标签: iphone objective-c

在我的应用程序中,我需要调用一个函数,该函数又调用许多函数。问题是我调用了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函数。

3 个答案:

答案 0 :(得分:1)

在Objective c中,就像在任何结构化语言中一样,当您调用返回

中的值的函数时
NSInteger x = [self yourFunction];
[self somethingElse:x];

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

答案 1 :(得分:0)

您可以使用以下方法,并将waitUntilDone传递为是。它会等待你的功能完成 -

performSelectorOnMainThread:withObject:waitUntilDone:

还有更多可用的方法,你可以参考NSObject类 - https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html

答案 2 :(得分:0)

如果在主线程中调用了您的函数链,则应用程序应自动等待进程结束,然后再继续执行下一个操作。然后,您无需做任何事情来实现目标。

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