2013-09-04 2 views
2

Я пытаюсь понять блоки немного больше.исполняемые блоки, хранящиеся в NSMutableArray с параметром

У меня есть эти определения:

@property (nonatomic, retain) NSMutableArray * callBacksOnSuccess; 
@property (nonatomic, copy) void (^callBackSuccessWithUIImage) (UIImage *) ; 

Когда изображение загрузки заканчивается я делаю это в блоке завершения, и все отлично

UIImage *coverImage = [UIImage imageWithData:data]; 
callBackSuccessWithUIImage(coverImage); 

Теперь я хотел бы быть в состоянии сделать то же самое для всех блоков обратного вызова, хранящихся в callBacksOnSuccess NSMutableArray, но я не знаю, как это сделать.

Я пробуя для в цикле, но это не работает, скорее всего, из-за Неоднозначное определение класса ID:

UIImage *coverImage = [UIImage imageWithData:data]; 
for (id callBackBlock in callBacksOnSuccess) 
{callBackBlock(coverImage);} 

Пожалуйста толкнуть меня к правильному подходу.

спасибо!

ответ

3

Прежде всего:

Рассмотрим использовать typedef для ваших блоков, чтобы облегчить синтаксис:

typedef void (^MyBlock)(UIImage*); //declare this somewhere 

Затем вы можете легко перебирать массиве, как это, выполнив каждый блок внутри него:

UIImage *coverImage = [UIImage imageWithData:data]; 
for (MyBlock block in callBacksOnSuccess) { 
    block(coverImage); 
} 

Вы можете даже использовать новый тип в вашей собственности:

@property (nonatomic, copy) MyBlock callBackSuccessWithUIImage; 
+1

спасибо! работает как шарм. так удивился, увидев typedef как решение. – TrekOnTV2017

+0

Рад помочь! 'Typedef' на самом деле просто все упростило для понимания и чтения. Ваша проблема заключалась в том, что вы объявляли переменную 'callBackBlock' внутри цикла foreach' как тип' id', который не поддерживает вызовы типа 'block()'. Если бы вы указали переменную как 'void (^ callBackBlock) (UIImage *)' в цикле for, она бы работала точно так же, но просто «уродливая» –

+1

да, я знал, что проблема была в этом, просто не мог понять, что с этим делать. Блоки потрясающие, мне просто нужно немного больше времени, чтобы их полностью понять. – TrekOnTV2017

Смежные вопросы