RestKit .20 を使用して 2 つのオブジェクトをマップしています。2 番目のオブジェクトは最初のオブジェクトに依存します。したがって、最初の操作は 2 番目の操作の前に実行する必要があります。操作が完了すると、コントローラーはモデル オブジェクトを使用して適切な情報をテーブル ビューに表示します。
最初のオブジェクトには一意の ID があり、これを使用して URL 要求の一部を形成し、それに接続するオブジェクトを取得します。そのすべてが機能し、リクエストは情報を取得し、マッピングを正しく実行していますが、操作の順序はすべて間違っており、私はそれを理解することができません!
これが私がしたいことです:
- ビューが読み込まれ、最初のオブジェクトの読み込み/マッピングが開始されます。
- 最初のオブジェクトがロードされると、2 番目のオブジェクトがロード/マップされます。
- テーブル ビューがリロードされます。
何が起こるかは次のとおりです。
- ビューが読み込まれ、テーブル ビューが読み込まれます。
- 操作は最後に実行され、ブロック操作が実行されるたびにデータがリロードされます-私が望むソリューションではありませんが、それを機能させる唯一の方法です。
私が説明するのは難しいので、いくつかのコードをここに示します:(関係のないコードの割り当てを省略しました)
- (void)viewDidLoad
{
[super viewDidLoad];
[self loadFirstObjects];
//omitted code
}
- (void)loadFirstObjects {
//omitted code
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
self.pubRepos = mappingResult.array;
[self loadSecondaryObjects];
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"ERROR: %@", error);
}];
[operation start];
}
- (void)loadSecondObjects
{
for (FirstObject *firstObject in firstObjects) {
//Omitted code
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
SecondObject *secondObject = [mappingResult.array objectAtIndex:0];
[secondObjects setObject:secondObject forKey:secondObject.idNum];
[table reloadData];
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"ERROR: %@", error);
}];
[operation start];
}
}
では、これを希望どおりに機能させるにはどうすればよいですか? 最初にリクエスト/マッピングを実行してから、すべての情報をテーブルにロードして更新できるようにしたいと考えています。テーブルのリロードとは別に、Web サービスから新しいデータを常にリロード/マップする必要があります。
つまり、ここでの最大の問題は、操作ブロックが実行されるタイミングを正確に制御するにはどうすればよいかということです。