0

私は目標-cを学んでいます。以前に NSMutableArrays を使用したことがある人にとって、これが簡単な修正になることを願っています。

注: この質問をする前に、YouTube で 3 つのビデオを見て、5 つの記事を読みました。setValue:forKey で利用できるリソースはたくさんありますが、このシナリオには当てはまらないと思います。

三目並べゲームで行われた選択をサポートするために単純な配列を使用しようとしています。概念は単純です: - 配列は 9 つの配列ノードでインスタンス化されます - 選択が行われると、現在の文字が対応する配列ノードに配置されます - ゲームの終了を確認するメソッドは配列ノードを参照します。

問題: -各デフォルト オブジェクトNSNullの代わりに値を設定しようとしました。@""のエラーが発生します"Unexpected interface name 'NSNull'。- アレイ ノードをデバッグするための NSLog ロジックが実行されない。私の仮定は、配列が取り込まれていないということです。


@synthesize lblStatus, currLetter;
@synthesize selections;
@synthesize btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8;

- (void)viewDidLoad
{
    [super viewDidLoad];

    [selections initWithObjects:
     @"", @"", @"", @"", @"", @"", @"", @"", @"", nil];

    currLetter = @"X";
    [self updateTitle];
    // Do any additional setup after loading the view, typically from a nib.
}

- (IBAction)takeTurn:(id)sender {
    UIButton *btn = (UIButton *)sender;
    if (btn.currentTitle == nil) {
        [selections replaceObjectAtIndex:btn.tag withObject:currLetter];
        [sender setTitle:currLetter forState:UIControlStateNormal];
        [self changeTurns];
    }
}

- (void)changeTurns {

    if ([currLetter isEqualToString:@"X"]) {
        currLetter = @"O";
    } else {
        currLetter = @"X";
    }

    for (NSString *node in selections) {
        NSLog([NSString stringWithFormat:@"Node: %@", node]);
    }

    [self updateTitle];
}

- (void)updateTitle {
    [lblStatus setText:[NSString stringWithFormat:@"%@'s Turn", currLetter]];
}

「悪いコード」と見なされるものを他に見つけた場合は、そのフィードバックも喜んで受け取ります。

どんな助けでも大歓迎です。

4

2 に答える 2

1

それ以外の[selections initWithObjects: @"", @"", @"", @"", @"", @"", @"", @"", @"", nil];

書きますselections = [[NSMutableArray alloc] initWithObjects: @"", @"", @"", @"", @"", @"", @"", @"", @"", nil];

于 2013-05-09T13:29:49.423 に答える
-1

その配列に [NSNull null] を追加してみてください。空の文字列の代わりに配列内に null オブジェクトを追加できます

よろしくお願いします

于 2013-05-09T13:48:08.777 に答える