特定のメソッドのデータを返す必要があるデリゲート クラスがあります。私の問題は、そのデータを取得するために行う呼び出しの一部が (完了ブロックを使用して) 非同期であるため、手元のデータを使用してメソッドから戻るのが難しいことです。これが私が思いついたものです:
- (NSArray *)contentsAtPath:(NSString *)path
{
__block NSMutableArray *contentsArray = [NSMutableArray array];
__block BOOL blockProcessing = YES;
SuccessBlock success = ^(MyResult *result)
{
for (NSUInteger i = 0; i < result.count; i++)
{
MyItem *item = [result objectAtIndex:i];
[contentsArray addObject:item];
}
blockProcessing = NO;
};
[self.dataManager itemsAtPath:path success:success failure:nil];
while (blockProcessing) {
// wait for block to complete
}
return contentsArray;
}
while ループを使用せずにこれを達成するためのより良い方法はありますか?