2015-04-22 4 views
0

Возможно ли запустить блок, когда делегат получает сообщение?Смешивание блоков и делегатов в Objective-C

Например, если у меня была фреймворк, который принял блок пустоты в качестве параметра (мы будем называть его блоком «успех») и использовал делегат NSURLConnection, чтобы делать вещи с этими аргументами метода, когда я получаю ответ от веб-страницы, как я могу назвать блок «успех», переданный в параметрах метода?

Это действительно трудно объяснить, и у меня, очевидно, нет никакого кода для этого, но я могу уточнить, есть ли у вас какие-либо вопросы.

+2

Я уверен, что это то, что вы ищете: [Пользовательский блок завершения для моего собственного метода] (http://stackoverflow.com/q/16324095) –

+0

Точно это. Благодарю. –

ответ

3

Вы абсолютно можете. То есть как все обработчики завершения/обратные вызовы работают. Фактически, это то, что блок для.

Возьмем простой пример, рассмотрим этот метод класса NSURLConnection:

+ (void)sendAsynchronousRequest:(NSURLRequest *)request 
          queue:(NSOperationQueue *)queue 
       completionHandler:(void (^)(NSURLResponse *response, 
              NSData *data, 
              NSError *connectionError))handler 

Для третьего параметра необходимо передать блок. И когда запрос будет завершен, какое-то время в будущем, что делает NSURLConnection? Он звонки блок.

Итак, вы можете сделать то же самое, что и NSURLConnection. Вы можете написать метод, который берет блок, вы держитесь за блок, вы делаете что-то, что может занять некоторое время, а затем вы вызовите блок.

+0

Как вы храните/вызываете блок? –

+0

Вы храните его так же, как вы храните что-либо - в переменной/свойстве. И вы называете это так же, как вы вызываете какую-либо функцию: вы говорите, что ее имя следует скобками (вы знаете, с аргументами в них). – matt

+0

Я попробую, когда вернусь домой, я понятия не имел, что это возможно! Пометка как правильный ответ, предполагая, что вы правы, спасибо! –

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