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

时间:2012-11-21 03:11:30

标签: ios xcode4.5

这是我第一次发帖,我被困在肯定是一个简单的问题上。我正在使用一个框架,导致雪落在用户选择的UIImage上。以下是创建降雪类实例的代码:

- (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 frame]消息发送到解除分配的对象”

如果我放置:

  [snowfalling stopanimating];
在降雪的情况下,

比当前的视图控制器只是在屏幕上冻结了雪。但它会让我弹出前一个控制器没有问题。

我的问题是,当按下后退按钮(popViewControllerAnimated:YES)时如何停止动画?

2 个答案:

答案 0 :(得分:2)

您可以在stopAnimatingviewWillDisappear 记得设置降雪自动释放

答案 1 :(得分:0)

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

    @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. 在[backButton:]中调用

     [self.snowfalling stopanimating];
     self.snowfalling = nil;
    
  5. 调用popViewControllerAnimated之前。更好的是,将这两行放在[viewWillDisappear:]中,这样就可以调用它们。