viewController間のコールバックにデリゲートの代わりにブロックを使用していますが、このシナリオが機能しない理由を理解できません。
したがって、mainViewControllerのプロパティであるtableViewを返すときに、detailViewControllerを呼び出している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]
。2つのうちの1つを削除すると、アプリは正常に動作しているように見えますが、意図した動作が見当たらないことは明らかです。
アプリがクラッシュすると、コンソールのメッセージは次のようになります。
Previous frame inner to this frame (gdb could not unwind past this frame)
なぜこれが機能しないのか誰かが考えていますか?
更新: SaveBlockは次のように定義されています
typedef void (^SaveBlock)();
@interface DetailViewController : UIViewController
{
}
@property(nonatomic,assign)SaveBlock saveBlock;