ブロックが非同期の場合、メソッドが終了する前にプログラムが非同期タスクを完了していない可能性があるため、isを返す前に戻り値を設定することはできません。いくつかのより良い解決策は次のとおりです。
必要に応じて、同じ仕事をする同期方法を見つけてください。
ブロックの実行中にUIがロックされるため、これは最善の選択ではない可能性があります。
値が見つかったらセレクターを呼び出し、メソッド自体を無効にします。
パーチャンス、次のようなものを試してください:
-(void) findImageAtIndex:(NSUInteger)index target:(id)target foundSelector:(SEL)foundSEL
{
__block UIImage *image;
[self.album enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:index] options:0 usingBlock: ^(ALAsset *result, NSUInteger index, BOOL *stop)
{
//set image in here
if ([target respondsToSelector:foundSEL]) { //If the object we were given can call the given selector, call it here
[target performSelector:foundSEL withObject:image];
return;
}
}];
//Don't return a value
}
次に、次のように呼び出すことができます。
...
//Move all your post-finding code to bar:
[self findImageAtIndex:foo target:self foundSelector:@selector(bar:)];
}
- (void)bar:(UIImage *)foundImage {
//Continue where you left off earlier
...
}