2013-06-29 43 views
0

我對Objective-C比較陌生,我開始經歷SneakyInput。我將它添加到了我正在製作的小應用程序(它啓用了ARC),並且當我運行該應用程序時它剛剛崩潰。我再次嘗試,編寫針對非ARC的鬼祟輸入,並且完美地工作。SneakyInput在ARC上的問題

這是ARC版本(其中已啓用ARC),它崩潰

- (void)initJoystick 
{ 
    SneakyJoystickSkinnedBase *joystickBase; 
    joystickBase.backgroundSprite = [CCSprite spriteWithFile:@"[email protected]"]; 
    joystickBase.thumbSprite = [CCSprite spriteWithFile:@"Icon-Small.png"]; 

    joystickBase.joystick = [[SneakyJoystick alloc] initWithRect: CGRectMake(0, 0, 128, 128)]; 

    joystickBase.position = ccp(55, 55); 
    [self addChild:joystickBase]; 
} 

- (id)init 
{ 
    if((self=[super init])) 
    { 
     [self initJoystick]; 
    } 
return self; 
} 

@end 

這是不ARC版本,它不會崩潰

- (void)initJoystick 
{ 
    SneakyJoystickSkinnedBase *joystickBase = [[[SneakyJoystickSkinnedBase alloc] init] autorelease]; 
    joystickBase.backgroundSprite = [CCSprite spriteWithFile:@"[email protected]"]; 
    joystickBase.thumbSprite = [CCSprite spriteWithFile:@"Icon-Small.png"]; 

    joystickBase.joystick = [[SneakyJoystick alloc] initWithRect: CGRectMake(0, 0, 128, 128)]; 

    joystickBase.position = ccp(55, 55); 
    [self addChild:joystickBase]; 

    leftJoystick = [joystickBase.joystick retain]; 
} 

-(id) init 
{ 
    if((self=[super init])) 
    { 
     [self initJoystick]; 
    } 
return self; 
} 

@end 

我想繼續在ARC與應用程序的其餘部分,所以我想知道是否有人可以告訴我如何解決這個問題,以便它不會崩潰。對不起,如果非常noobie問題。

這是錯誤消息時ARC啓用

2013-06-29 20:49:15.724 joystick[2135:12c03] *** Assertion failure in -[HelloWorldLayer addChild:], 
/Users/monagros/Desktop/Stuff/Cocos2D/apps/joystick/joystick/libs/cocos2d/CCNode.m:362 

回答

1

在非ARC版我在輸出得到的,你正在使用的alloc設置joystickBase /初始化:

SneakyJoystickSkinnedBase *joystickBase = [[[SneakyJoystickSkinnedBase alloc] init] autorelease]; 

但在你的代碼的ARC版本,你不是;你要離開joystickBase爲零。該對象的addChild:方法是checking for a nil value

有了ARC,你應該初始化joystickBase這樣的:

SneakyJoystickSkinnedBase *joystickBase = [[SneakyJoystickSkinnedBase alloc] init]; 
0

你可以告訴編譯器不使用弧形的偷偷摸摸的輸入。

點擊你的項目,然後點擊你的目標。選擇構建階段,並搜索潛行輸入

當您發現sneakyinput.m雙擊預留給編譯器標誌的空間中的空白。然後寫這個:

-fno-objc-arc 

如果您使用無弧功能,此方法是很好的。我猜想,sneakyinput不是ARC準備好的。

然後,您就像對待sneakyinput一樣,如果它啓用了弧。

+0

這些每個文件的編譯器標誌可能已經設置,因爲應用程序編譯和運行,只是遇到一個實際上並非ARC相關的運行時異常。 –

+0

我明白了,把它當作暗示:) – chrs