我有一个奇怪的问题,presentViewController
的完成块最近没有执行。
这是在按钮上调用的代码
DebugViewController * x = [[DebugViewController alloc] init];
x.view.backgroundColor = [UIColor redColor];
[self presentViewController:x animated:YES completion:^{
NSLog(@"Hello world %@" , self );
}];
DebugViewController
是this class,self
是UIViewController
,结构如下:
JASidepanels
---> (中心小组)UINavigationController
---> self
正如预期的那样,完全相同的代码适用于任何其他项目,但几周后它在我的工作中不起作用。我最近添加了JASidePanels
和其他一些Pod。
以下是肯定的:
任何想法我怎么能调试块为什么不为我执行?
编辑:哇,这太奇怪了。我调试了一整天,并试图逐行删除代码。然而,似乎我发现了一些非常有趣的东西。如果在我的任何一个viewcontrollers上都有一个名为currentAction
的属性(我的一个VC就是这种情况),那么完成块将不会在整个应用程序中执行!有人可以确认吗?这是一个要点GIST,将其更改为currentAction
。
答案 0 :(得分:1)
如果在我的任何一个viewcontrollers上有一个名为的属性 currentAction,完成块不会在整体中执行 申请!有人可以确认吗?
这可能是因为UIViewController
有一个名为_currentAction
的实例变量,正如你在UIViewController.h的这一部分所看到的那样:
id _dimmingView;
id _dropShadowView;
id _currentAction;
UIStoryboard *_storyboard;
声明一个名为currentAction
的属性并使用访问器的默认综合将干扰该ivar。为避免这种情况,请明确合成访问者并为ivar提供不同的名称以支持您的财产。尝试在您的班级中添加这样的一行:
@synthesize currentAction=_myCurrentAction;
可能可以帮助您避免干扰现有的ivar,只要UIViewController只直接访问_currentAction
并且不使用任何内部声明的访问者或KVC。
答案 1 :(得分:-2)
不要使用alloc / init来创建视图控制器。 Ether使用instantiateViewControllerWithIdentifier:
从故事板加载它,或使用initWithNibName:bundle:
从nib加载它。
这可能是导致问题的原因。