0

私は Objective-C に比較的慣れておらず、 SneakyInputを使い始めています。私が作成している小さなアプリ(ARC対応)に追加しましたが、アプリを実行するとクラッシュしました。非ARCの卑劣な入力をコーディングして、もう一度試してみましたが、完全に機能します。

これは ARC バージョン (ARC が有効になっている場合) で、クラッシュします

- (void)initJoystick
{
    SneakyJoystickSkinnedBase *joystickBase;
    joystickBase.backgroundSprite = [CCSprite spriteWithFile:@"Icon-Small@2x.png"];
    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:@"Icon-Small@2x.png"];
    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 を続行したいので、クラッシュしないようにこれを修正する方法を誰か教えてもらえないかと思っていました。非常に初心者の質問でしたら申し訳ありません。

これは、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
4

2 に答える 2

1

非 ARC バージョンでは、joystickBasealloc/init を使用して設定しています。

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

しかし、コードの ARC バージョンではそうではありません。あなたはjoystickBasenilのままです。addChild:メソッドは、そのオブジェクトの nil 値をチェックしています。

joystickBaseARC では、次のように初期化する必要があります。

SneakyJoystickSkinnedBase *joystickBase = [[SneakyJoystickSkinnedBase alloc] init];
于 2013-06-29T11:48:28.200 に答える