-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];

関数が値を返すまで、次の命令は実行されません。つまり、yourFunction が終了して x の値を返すまで、somethingElse は実行されません。

于 2012-04-16T09:35:17.670 に答える
0

関数のチェーンがメイン スレッドで呼び出される場合、アプリはプロセスが終了するのを自動的に待ってから、次の操作に進んで実行する必要があります。そうすれば、目標を達成するために何もする必要はありません。

プロセスが非常に重い場合、アプリは最後までフリーズすることに注意してください。これは、別のスレッドでアプリをブロックできる優れたカスタム実行プロセスです。

于 2012-04-16T09:41:59.023 に答える
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 に答える