3

presentViewController我有一个奇怪的问题,最近没有执行完成块。这是在按钮点击时调用的代码

    DebugViewController * x = [[DebugViewController alloc] init];
    x.view.backgroundColor = [UIColor redColor];
    [self presentViewController:x animated:YES completion:^{
        NSLog(@"Hello world %@" , self );
    }];

DebugViewController这个类self是这样UIViewController的结构: JASidepanels--->(中心面板)UINavigationController--->self

正如预期的那样,完全相同的代码在任何其他项目中都可以使用,但几周后它就无法在我的项目中使用了。我最近添加JASidePanels了一些其他的 Pod。

这是肯定知道的:

  • 模态显示,viewWillAppear 和 viewDidAppear 被调用,它动画,它正常工作
  • viewWillDisappear 在展示 VC 时被调用,而 dealloc 不是,所以它是实时的。
  • 其他块工作。
  • 它在主线程上

知道如何调试为什么该块不为我执行吗?

编辑:哇,这非常奇怪。我调试了一整天,并试图逐行删除代码。然而,我似乎发现了一些非常有趣的东西。如果在我的任何视图控制器上有一个完全命名的属性currentAction(在我的一个 VC 中就是这种情况),完成块将不会在整个应用程序中执行!有人可以确认吗?这是一个要点GIST,将其更改为currentAction.

4

2 回答 2

1

如果在我的任何视图控制器上有一个名为 currentAction 的属性,完成块将不会在整个应用程序中执行!有人可以确认吗?

这可能是因为UIViewController有一个名为 的实例变量_currentAction,正如您在 UIViewController.h 的这一部分中看到的那样:

id               _dimmingView;
id               _dropShadowView;

id                _currentAction;
UIStoryboard     *_storyboard;

声明一个名为的属性currentAction并为访问器使用默认综合会干扰该 ivar。为避免这种情况,请显式合成访问器并为 ivar 提供不同的名称来支持您的属性。尝试在您的课程中添加这样的行:

@synthesize currentAction=_myCurrentAction;

可能会帮助您避免干扰现有的 ivar,只要 UIViewController 仅_currentAction直接访问并且不使用任何内部声明的访问器或 KVC。

于 2014-05-29T13:55:05.810 回答
-2

不要使用 alloc/init 创建视图控制器。以太使用 . 从情节提要加载它instantiateViewControllerWithIdentifier:,或使用 . 从 nib 加载它initWithNibName:bundle:

这可能是您的问题的原因。

于 2014-05-29T12:19:18.807 回答