0

VB.netのバックグラウンドから来たXCodeの初心者なので、基本的なものが欠けている可能性があります。

基本クラスの .h および .m ファイルを作成しました。以下にリストされているコード。

//
//  tttMove.h
//  TicTocToe
//
//  Created by Matthew Baker on 12/09/2013.
//  Copyright (c) 2013 Matthew Baker. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface tttMove : NSObject

-(id)init;
-(id)initWithPos :(int)newAcross :(int)newDown ;

-(void)setAcross:(int)newAcross;
-(void)setDown:(int)newDown;
-(void)set:(int)newAcross :(int)newDown;

-(int)across;
-(int)down;

-(void)showResults;

@end


//
//  tttMove.m
//  TicTocToe
//
//  Created by Matthew Baker on 12/09/2013.
//  Copyright (c) 2013 Matthew Baker. All rights reserved.
//

#import "tttMove.h"

@implementation tttMove

int _across;
int _down;

-(id) init {
    if( (self=[super init] )) {
        _across = 0;
        _down = 0;
    }
    return self;
}
-(id)initWithPos :(int)newAcross :(int)newDown {
    if( (self=[super init] )) {
        _across = newAcross;
        _down = newDown;
    }
    return self;
}
-(void)showResults {
    NSLog(@"move position %i,%i",_across,_down);
}

-(void)setAcross:(int)newAcross {
    _across = newAcross;
}
-(void)setDown:(int)newDown {
    _down = newDown;
}
-(void)set:(int)newAcross :(int)newDown {
    _across = newAcross;
    _down = newDown;
}
-(int)across {
    return _across;
}
-(int)down {
    return _down;
}
@end

私が抱えている問題は、同じクラスの複数のインスタンスを作成すると、それらが常に共通の値を共有することです。一方を他方なしで更新することはできません...

-(void) test {

    tttMove *move1 = [[tttMove alloc] initWithPos:1 :1];
    [move1 showResults];

    tttMove *move2 = [[tttMove alloc] initWithPos:2 :2];
    [move2 showResults];

    [move1 showResults];

}

私が得る出力は次のとおりです。

2013-09-15 23:01:35.004 TicTocToe[19925:c07] move position 1,1
2013-09-15 23:01:35.006 TicTocToe[19925:c07] move position 2,2
2013-09-15 23:01:35.006 TicTocToe[19925:c07] move position 2,2

つまり、alloc init を呼び出していますが、新しいインスタンスを取得していません。

基本的なことを見逃していると思いますが、グーグルは役に立ちませんでした。おそらく、正しいものを探しさえしていません。

助けてくれてありがとう。

4

2 に答える 2

1

int _across;の代わりに @property を使用してみてください。そしてint _down;。@property を使用すると、初期化子が Xcode によって自動的に提供されるため、sets メソッドを削除します。

だから試してください:

@property (nonatomic) int across;

@property (nonatomic) int down;

そして削除しint _acrossます。とint _down。プロパティとその仕組みに関する詳細情報が必要な場合: https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html

于 2013-09-15T22:35:42.577 に答える