当popViewControllerAnimated:YES被执行时,应用程序与僵尸崩溃

问题描述:

这是我第一次发布,我被困在肯定是一个简单的问题。我正在使用一个框架,导致雪落在用户选择的UIImage上。下面是创建snowfalling类的实例代码:当popViewControllerAnimated:YES被执行时,应用程序与僵尸崩溃

- (void)viewDidAppear:(BOOL)animated 
{ 

    // Animate 
    SnowFalling *snowfalling = [[SnowFalling alloc] 
          initWithView:self.view]; 
    snowfalling.hidden = NO; 
    snowfalling.numbersOfFlake = 175; 
    [snowfalling startAnimating]; 

} 

在这之后,我想用一个自定义后退按钮弹出回到先前的观点:

// Custom back button on toolbar. 
- (IBAction)backButton:(UIBarButtonItem *)sender { 
    [[self navigationController] popViewControllerAnimated:YES]; 
} 

这正常接受当我打返回按钮,与僵尸应用程序崩溃,说:“[UIView的帧]消息发送到解除分配对象”

如果我把:

[snowfalling stopanimating]; 

在降雪的情况下,比当前视图控制器刚刚将雪冻结在屏幕上。但它会让我弹出到前一个控制器没有问题。

我的问题是,当后按钮(popViewControllerAnimated:YES)被击中时,我该如何停止动画?

+1

您是否尝试调用你的'stopAnimating'在'viewWillDisappear'? – Rob

  1. 在你的控制器类创建一个属性来保存snowfalling的价值:

    @property(nonatomic,retain) SnowFalling *snowfalling; // in @interface 
    
    @synthesize snowfalling; // in @implementation 
    
  2. 在你viewDidAppear:新创建的SnowFalling分配给该属性,而不是局部变量。

  3. 请记住在将属性分配给[发布] SnowFalling之后。整个方法应该是这样的:

    - (void)viewDidAppear:(BOOL)animated 
    {  
        // Animate 
        self.snowfalling = [[SnowFalling alloc] 
             initWithView:self.view]; 
        [self.snowfalling release]; 
        self.snowfalling.hidden = NO; 
        self.snowfalling.numbersOfFlake = 175; 
        [self.snowfalling startAnimating]; 
    } 
    
  4. 在[返回按钮:]调用popViewControllerAnimated之前调用

    [self.snowfalling stopanimating]; 
    self.snowfalling = nil; 
    

。更好的是,将这两行放置在[viewWillDisappear:]中,这样他们将总是被调用。

+0

我正在使用弧。如何确保在使用arc时释放它? – user1840632

+0

这很好。非常感谢。 – user1840632

可以stopAnimatingviewWillDisappear
记得设置snowfalling自动释放

+1

我正在使用弧。如何确保在使用arc时释放它? – user1840632

+0

如果使用弧,它将由系统管理 –