Использование ввода NSInteger для вставки объекта: ___ atIndex: ___

Я пытаюсь создать простую игру в крестики-нолики из командной строки, используя NSMutableArray.

Создал класс под названием «Доска» с методом «getPosition» (я предполагаю, что это лучший способ получить пользовательский ввод). Я запрашиваю позицию, а затем привожу от int к NSUInteger)

#import "Board.h"

@implementation Board

-(void)getPosition;
{
    int enteredPosition;
    scanf("%i", &enteredPosition);
    NSUInteger nsEnteredPosition = (NSUInteger ) enteredPosition;
    NSLog(@"Position = %lu", (unsigned long)nsEnteredPosition);
}



#import <Foundation/Foundation.h>
#import "Board.h"


int main(int argc, const char * argv[])
{

    @autoreleasepool {

        NSString *currentPlayer;
        NSMutableArray *gameBoard=[[NSMutableArray alloc] initWithCapacity:9];

        for(int i; i<=2; i++)
        {
            if(i %2)
            {
                currentPlayer=@"X";
            }
            else
            {
                currentPlayer=@"O";
            }

        NSLog(@"Player %@, select an open spot 1 - 9 on the board", currentPlayer);
        Board *currentPosition = [[Board alloc] init];
        [currentPosition getPosition];
        [gameBoard insertObject:currentPlayer atIndex:currentPosition]; //this is where i have a problem
        }

Насколько я понимаю, для atIndex требуется параметр NSUInteger, но я получаю сообщение об ошибке:

«Несовместимый указатель на целочисленное преобразование, отправляющий« Board * _strong »в параметр типа« NSUInteger »(он же« неназначенный длинный »)


person zamanfu    schedule 19.11.2014    source источник


Ответы (1)


Вы используете currentPosition в качестве индекса, который является объектом Board. Возможно, [currentPosition getPosition] должен возвращать NSUInteger. Если это так, попробуйте переписать последнюю часть кода следующим образом:

Board *theBoard = [[Board alloc] init];
NSUInteger currentPosition = [theBoard getPosition];
[gameBoard insertObject:currentPlayer atIndex:currentPosition]; //this is where i have a problem
person Casey Fleser    schedule 19.11.2014
comment
Спасибо @somegeekintn, однако, когда я меняю код на это, я получаю следующую ошибку: Инициализация «NSUInteger (он же «unsigned long») с выражением несовместимого типа void. Это потому, что я определил метод в классе Board для возврата (void)? Я пытался изменить его, но, похоже, не помогает. - person zamanfu; 19.11.2014
comment
Возможно. Возможно, было бы полезно изменить вопрос, показывающий источник для класса Board. - person Casey Fleser; 19.11.2014
comment
Неважно. Я думаю, я исправлю это сейчас. Мне нужно было изменить тип метода getPosition с (void) на (int) как в заголовке моего класса, так и в файлах реализации. - person zamanfu; 19.11.2014