2009-04-07 20 views
3

私はUIImageViewアニメーションにいくつか問題があります。私は、画像を含む3つのNSArrayオブジェクトを作成し、UIImageViewを取り、新しいアニメーションを割り当てる3つのメソッドを作成しました。 3つの方法のうちの1つを最初に呼び出すのは素晴らしいですが、もう一度やり直すとシミュレータとデバイスがクラッシュします。何か案は?ログ内のiPhone UIImageView animation woes

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 

// set the anims 
slowAnimation = [NSArray arrayWithObjects: 
        [UIImage imageNamed:@"image1.jpg"], 
        [UIImage imageNamed:@"image2.jpg"], 
           nil]; 
defaultAnimation = [NSArray arrayWithObjects: 
        [UIImage imageNamed:@"image3.jpg"], 
        [UIImage imageNamed:@"image4.jpg"], 
         nil]; 
fastAnimation = [NSArray arrayWithObjects: 
        [UIImage imageNamed:@"image5.jpg"], 
        [UIImage imageNamed:@"image6.jpg"], 
        nil]; 

// load the default speed - this works once, but when applied a second time it crashes the simulator and device 
[self setDefaultAnim:myUIImageViewObject]; 

[super viewDidLoad]; 
} 


// animation switcher 
-(void)setSlowAnim:(UIImageView *)imageView 
{ 
    [imageView stopAnimating]; 
    imageView.animationImages = slowAnimation; 
    imageView.animationDuration = 0.4; 
    [imageView startAnimating]; 
} 
-(void)setDefaultAnim:(UIImageView *)imageView 
{ 
    [imageView stopAnimating]; 
    imageView.animationImages = defaultAnimation; 
    imageView.animationDuration = 0.4; 
     [imageView startAnimating]; 
} 
-(void)setFastAnim:(UIImageView *)imageView 
{ 
    [imageView stopAnimating]; 
    imageView.animationImages = fastAnimation; 
    imageView.animationDuration = 0.4; 
    [imageView startAnimating]; 
} 

エラー:

[Session started at 2009-04-06 22:46:54 +0100.] 
Loading program into debugger… 
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008) 
Copyright 2004 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "i386-apple-darwin".warning: Unable to read symbols for "/System/Library/Frameworks/UIKit.framework/UIKit" (file not found). 
warning: Unable to read symbols from "UIKit" (not yet mapped into memory). 
warning: Unable to read symbols for "/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics" (file not found). 
warning: Unable to read symbols from "CoreGraphics" (not yet mapped into memory). 
Program loaded. 
sharedlibrary apply-load-rules all 
Attaching to program: `/Users/hello/Library/Application Support/iPhone Simulator/User/Applications/6DB7C45D-1A26-4775-9AE3-C30F3EBC9F83/PlateSpinner.app/PlateSpinner', process 345. 
kill 
quit 

The Debugger has exited with status 0. 

答えて

8

私はあなたがviewDidLoadで作成する3つのアレイをretainする必要があると思う - あなたがそれらにallocを呼び出すことはありませんので、あなたが呼び出すまで、あなたが所有権を持っていませんretain

+0

完璧、ありがとう:] – antonmills

3

代わりにちょうど使用にinitWithObjectsメッセージを保持して呼び出す:あなたはラウンジが示唆何場合

slowAnimation = [[NSArray alloc] initWithObjects: 
            [UIImage imageNamed:@"image1.jpg"], 
            [UIImage imageNamed:@"image2.jpg"], 
            nil]; 
0

、しかし、あなたは後でslowAnimationオブジェクトを解放する必要があることに注意してください。あなたはそれをalloc'dするので、他の人が実行時にそれを知らせるまで、保持カウントは1になります。