0

我有一个应用程序,它使用转换文件从一页翻到另一页。我正在使用 ARC 并且在 5.1 上工作得很好,但在 4.3 模拟器上一直崩溃。查看线程和仪器的扩展细节,它指向 2 行代码(如下所示),错误为:EXC_BREAKPOINT (code=EXC_I386_BPT)。看起来 UIViewController 正在被释放。不知道如何解决这个问题。提前感谢您提供的任何帮助!

@synthesize containerView = _containerView;
@synthesize viewController = _viewController;  //ERROR LINE#1

- (id)initWithViewController:(UIViewController *)viewController
{
    if (self = [super init]) 
    {
      _viewController = viewController;
    }
    return self;
}

- (void)loadView
{
    self.wantsFullScreenLayout = YES;
    UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
    view.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
    self.view = view;

    _containerView = [[UIView alloc] initWithFrame:view.bounds];
    _containerView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:_containerView];

    [_containerView addSubview:self.viewController.view];
}

- (void)transitionToViewController:(UIViewController *)aViewController
                   withOptions:(UIViewAnimationOptions)options
{    
    aViewController.view.frame = self.containerView.bounds;

    [UIView transitionWithView:self.containerView
                      duration:0.65f
                       options:options
                    animations:^{ [self.viewController.view removeFromSuperview];
                        [self.containerView addSubview:aViewController.view];}
                    completion:^(BOOL finished)
   //ERROR LINE#2                 { self.viewController = aViewController;}];
}
4

1 回答 1

0

您不应该在各自的视图控制器下将视图转换进出。你可能会让它工作,但它充其量是脆弱的。

如果你想让你的代码适应未来,你应该在视图控制器之间转换并让它们处理自己的视图,但如果你不喜欢默认动画,则将其包装在所需的动画中。因此,您应该:

  1. 只需做简单的presentViewControllerorpushViewController去下一个控制器和dismissViewControllerorpopViewController返回;或者

  2. 在 iOS 5 中,您可以制作自己的容器视图控制器(参见WWDC 2011 中的第 102 节或参见UIViewController 参考中关于视图控制器包含的讨论),然后您就可以transitionFromViewController.

如果我们更多地了解您的应用程序流程以及您为什么要这样做,我们可能会为您提供进一步的建议。

于 2012-06-16T13:51:33.767 回答