Я использую блоки вместо делегатов для обратных вызовов между viewControllers, но я не в состоянии понять, почему этот сценарий не работает:блоки обратного вызова аварии
Так что у меня mainViewController, который звонит в detailViewController, когда возврат tableView, который является свойством mainViewController, необходимо перезагрузить.
DetailViewController *actionDetail = [[DetailViewController alloc]initWithSaveBlock:^{
[self.tableView reloadData] //app crashes here
}];
в detailViewController «Сохранить» вызывается, когда пользователь нажимает кнопку «Сохранить»
- (void)save
{
if (self.saveBlock)
self.saveBlock();
[self dismissModalViewControllerAnimated:YES];
}
по какой-то причине [self.tableView reloadData]
не идет вместе с [self dismissModalViewControllerAnimated:YES]
. Если я удалю одно из двух, приложение, похоже, работает нормально, очевидно, что я не вижу намеченного поведения.
Когда приложение разбивает сообщение в консоли:
Previous frame inner to this frame (gdb could not unwind past this frame)
Любой идея, почему это не работает?
Update: SaveBlock определяется как этот
typedef void (^SaveBlock)();
@interface DetailViewController : UIViewController
{
}
@property(nonatomic,assign)SaveBlock saveBlock;
Где определение свойства 'saveBlock'? Я уверен, что это 'strong' /' keep', а не 'copy', правильно? Он должен быть «копировать». – mattjgalloway
Нет, это назначено, я обновил вопрос – Oysio
Ну, а не правильно. Он должен быть «копировать». – mattjgalloway