Использование блоков Objective-C для написания обработчика завершения

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

Вот что у меня пока...

@interface myController ()
   typedef void (^CompletionBlock)();
@end

Затем я объявил такой метод:

-(void)reloadDataWithCompletions:(CompletionBlock)completionBlock{
    [self.tableView reloadData];
    completionBlock();
}

Чего я не знаю, как сделать, так это написать код в completeBlock. Написать ли мне еще один метод с именем completeBlock ? Так

-(void) completionBlock{
    // do something here once the first method is finished?
 }

person Linda Keating    schedule 29.05.2015    source источник


Ответы (1)


Вам нужно вызвать метод reloadDataWithCompletions:, передающий блок, который вы хотите выполнить. Что-то вроде этого:

[self reloadDataWithCompletions:^{
    // The code you want executed in the block
}];

Кстати, в этом случае блок не нужен. Блок завершения действительно нужен только при работе с асинхронными вызовами, сделанными в других потоках. Поскольку ваш метод reloadDataWithCompletions: вызывает только reloadData в табличном представлении, и поскольку этот метод является синхронным, использование блока бессмысленно.

В этом случае вы получите тот же результат, выполнив:

-(void)reloadData {
    [self.tableView reloadData];
}

и называя это так:

[self reloadData];
// code you want executed after the reload is done
person rmaddy    schedule 29.05.2015
comment
Я конкретно спрашиваю о том, как указать, что происходит в блоке завершения, а не о том, как вызвать метод. - person Linda Keating; 29.05.2015
comment
Я показал тебе. Замените комментарий фактическим кодом, который вы хотите видеть в блоке завершения. Этот код зависит от вас и того, что вы хотите, чтобы произошло после перезагрузки таблицы. - person rmaddy; 29.05.2015
comment
А, спасибо. Я понял теперь. - person Linda Keating; 29.05.2015