在我的代码中我正在使用这个类:
https://github.com/gpambrozio/BlockAlertsAnd-ActionSheets
我希望在按下对话框视图中的按钮时调用presentModalViewController:
BlockAlertView *alert = [BlockAlertView alertWithTitle:@"Example" message:@"Text"];
[alert setDestructiveButtonWithTitle:@"Ok" block:^{
FirstView *firstView = [[FirstView alloc] initWithNibName:@"FirstView" bundle:nil];
[self presentModalViewController:firstView animated:YES];
}];
[alert show];
但应用冻结了,一分钟后打开视图,所以我的问题是如何在块完成时presentemodalviewcontroller?
答案 0 :(得分:0)
实际上有一些错误,首先,当你在一个块中实例化一些类/变量时,它们会响应并在该块内部生命周期。 所以你的块你在另一个线程中运行,这就是原因,这样你可能会导致保留周期,这对你的应用来说是非常糟糕的情况,改变这样的事情:
BlockAlertView *alert = [BlockAlertView alertWithTitle:@"Example" message:@"Text"];
FirstView *firstView = [[FirstView alloc] initWithNibName:@"FirstView" bundle:nil];
__weak typeof(self) weakSelf = self;
[alert setDestructiveButtonWithTitle:@"Ok" block:^{
[weakSelf presentModalViewController: weakSelf.firstView animated:YES];
}];
[alert show];
这样做,使用__weak typeof我们创建了一个弱引用来阻止块创建强引用循环*(很好阅读)现在我们确保将使用我们的视图来实例化当前的新模态视图。 / p>
任何疑问都可以免费提问:)