在我的应用程序中,我需要调用一个函数,该函数又调用许多函数。问题是我调用了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
函数。
答案 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)
如果在主线程中调用了您的函数链,则应用程序应自动等待进程结束,然后再继续执行下一个操作。然后,您无需做任何事情来实现目标。
请注意,如果您的流程非常繁重,您的应用会冻结直到结束。这是一个很好的自定义执行过程,可以阻止你的应用程序在另一个线程。