-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函数。

4

3 回答 3

1

在 Objective c 中,就像在任何结构化语言中一样,当您调用一个返回值的函数时

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

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

于 2012-04-16T09:35:17.670 回答
0

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

performSelectorOnMainThread:withObject:waitUntilDone:

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

于 2012-04-16T09:35:56.790 回答
0

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

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

于 2012-04-16T09:41:59.023 回答