0

私は、データを取得してそれを DatabaseManager に渡す役割を担う DataManager クラスを持っています。DataManager は、それをコア データに挿入します。

自分自身を Web サービスに公開するメソッドは以下のとおりです。

-(void)fetchDetailsForId:(NSString *)userId withFieldInformation:(NSString *)fieldInfo
{
    if (SessionIsActive) {
        [APIRequester startWithRequest:[NSString stringWithFormat:@"%@?%@",userId, fieldInfo]
completionHandler:^(APIConnectionManager *connection, id user, NSError *error) {
            //This is where the results are returned and the API manages its own threads and returns the result lazily
        }];
    }
}

上記のメソッドは DataManager クラス内にあります。ここで、同じクラスのいくつかのメソッドが上記のメソッドを呼び出して、サーバーからデータを取得します。このフェッチされたデータは、コア データに挿入するために DatabaseManager に転送されます。これのサンプルは

-(void)fetchCurrentDataForLoggedInUser
{
    NSData *fetchedData = [self fetchDetailsForId:loggedInId withFieldInformation:@"all"];
        //the fetchedData is then forwarded to DatabaseManager
}

ここで、Web メソッド (最初のメソッド) がバックグラウンド スレッド (API によって管理される) でデータを取得するため、API が関連データを取得する前に Web メソッドが終了するため、上記のメソッドの「fetchedData」の値は null になります。 .

このような状況に対処するための最も推奨される方法を誰か教えてもらえますか? サンプルコードなどを求めているわけではありません。正しい方向性だけで十分です。ハッキングや簡単な回避策よりも永続的な解決策を探しています。

ありがとうございました

4

1 に答える 1

0

say のプロパティを作成しNSDataますfetchedData。.h で合成し、.m で合成します。

次に、日付フェッチ後にこのプロパティを設定し、必要なメソッドを呼び出します。データ データの読み込みが完了したことを伝えるデリゲートがいくつかあるので、そこでバックグラウンドからプロパティを設定し、メイン スレッドで UI 更新メソッドを呼び出して、目的の結果を得ることができます。

メインスレッドで呼び出すために、このようなセレクターを使用できます

[self performSelectorOnMainThread:@selector(rollBar:)
      withObject:nil
      waitUntilDone:false];
于 2013-06-17T10:13:14.837 に答える