Iphone 更改UIImageView的动画图像

Iphone 更改UIImageView的动画图像,iphone,objective-c,ios,cocoa-touch,sdk,Iphone,Objective C,Ios,Cocoa Touch,Sdk,在我的iPhone应用程序的viewDidLoad方法中,我有以下代码: zombie[i].animationImages = zombieImages; zombie[i].animationDuration = 0.8/zombieSpeed[i]; zombie[i].animationRepeatCount = -1; [zombie[i] startAnimating]; 稍后在应用程序中调用以下代码: [zombie[i] sto

在我的iPhone应用程序的viewDidLoad方法中,我有以下代码:

zombie[i].animationImages = zombieImages;
        zombie[i].animationDuration = 0.8/zombieSpeed[i];
        zombie[i].animationRepeatCount = -1; 
        [zombie[i] startAnimating];
稍后在应用程序中调用以下代码:

[zombie[i] stopAnimating];
                zombie[i] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"zh.png"]];
                zombie[i].animationImages = flyingZombieImages;
                zombie[i].animationDuration = 0.8/zombieSpeed[i];
                zombie[i].animationRepeatCount = -1; 
                [zombie[i] startAnimating];

这会导致应用程序崩溃,并在
zombie[i]行显示EXC_BAD_访问权限

flyingZombieImages
使用以下代码初始化:(
zombieImages
以相同的方式初始化)

NSMutableArray*flyingZombieImages=[NSMutableArray];

对于(i=1;i,如Dima所述,flyingZombieImages可能未正确初始化,这导致崩溃。但是,在创建UIImageView的新实例时,还有另一个问题:

zombie[i] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"zh.png"]];
此时,您已经有一个对此变量中存储的旧UIImageView的引用。您正在丢失对它的引用,很可能会泄漏其内存。您还需要从视图层次结构中删除旧UIImageView并添加新的UIImageView

更好的方法是使用原始UIImageView并通过将此行替换为以下内容来更改其图像:

zombie[i].image = [UIImage imageNamed:@"zh.png"];

正如Dima提到的,flyingZombieImages可能没有正确初始化,这导致了崩溃。但是,在创建UIImageView的新实例时,还有另一个问题:

zombie[i] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"zh.png"]];
此时,您已经有一个对此变量中存储的旧UIImageView的引用。您正在丢失对它的引用,很可能会泄漏其内存。您还需要从视图层次结构中删除旧UIImageView并添加新的UIImageView

更好的方法是使用原始UIImageView并通过将此行替换为以下内容来更改其图像:

zombie[i].image = [UIImage imageNamed:@"zh.png"];

僵尸[i].animationImages=flyingZombieImages;flyingZombieImages是如何初始化的/在哪里初始化的?似乎这就是问题的原因。你是否调试过数组,看看数组在那一点上是否有效?@dima这不重要,因为他分配的是比我说的僵尸[i]高一行
,我说的是
flyingZombieImages
。他没有发布初始化代码。zombie[I].animationImages=flyingZombieImages;flyingZombieImages是如何初始化的/在哪里初始化的?似乎这就是问题的原因。你是否调试过数组,看看数组在那一点上是否有效?@dima这不重要,因为他在上面分配了一行。我不是说
zombie[i]
,我说的是
飞行僵尸图像
。他没有发布初始化代码。