【发布时间】:2012-05-20 16:44:37
【问题描述】:
我在 viewControllers 之间的回调中使用 Blocks 而不是委托,但我无法弄清楚为什么这种情况不起作用:
所以我有一个调用 detailViewController 的 mainViewController,当返回作为 mainViewController 上的属性的 tableView 时需要重新加载。
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)
有人知道为什么这不起作用吗?
更新: SaveBlock 是这样定义的
typedef void (^SaveBlock)();
@interface DetailViewController : UIViewController
{
}
@property(nonatomic,assign)SaveBlock saveBlock;
【问题讨论】:
-
saveBlock属性的定义在哪里?我敢打赌是strong/retain而不是copy,对吧?它必须是copy。 -
不是,我已经更新了问题
-
分配也不对。它必须是
copy。
标签: iphone objective-c ios objective-c-blocks