Добавление объектов в объектив C Array в индексе

У меня есть синтезированный NSMutableArray - TheResultArray . Я хочу вставить объекты NSNumber или NSInteger на определенные индексы (0-49). По некоторым причинам я никогда не могу получить какие-либо значения придерживаться в моем массиве. Каждый индекс возвращает ноль или 0.

    NSInteger timeNum = time;
    [theResultArray insertObject:[NSNumber numberWithInt:timeNum] atIndex:rightIndex];
    NSLog(@"The right index is :%i", rightIndex);
    NSLog(@"The attempted insert time :%i", time);
    NSNumber *testNum = [theResultArray objectAtIndex:rightIndex];
    NSLog(@"The result of time insert is:%i", [testNum intValue]);

Я alloc-init TheResultsArray в viewDidLoad. Время - это интегратор. Я пытался различные комбинации кода выше, но безрезультатно.

Консоль выводит это:

StateOutlineFlashCards[20389:20b] The right index is :20
StateOutlineFlashCards[20389:20b] The attempted insert time :8
StateOutlineFlashCards[20389:20b] The result of time insert is:0

Ответ на: "Добавление объектов в объектив C Array в индексе"

Количество ответов:3

Если я неправильно, вы не вставки NSInteger, но затем пытается вытащить NSNumber? Это два совершенно разных типа данных. Меня не удивляет, что ты получаешь странные результаты.

Кроме того, NSInteger не является объектом, так что вы не можете придерживаться его в массив. Вы, наверное, хотите, чтобы выделить NSNumber с этим integer и положить, что дюйма

Попробуйте что-то вроде: [theResultArray addObject:[NSNumber numberWithInteger:timeNum] atIndex:rightIndex];

Аналогичным образом, когда вы получаете значение, вам нужно распаковать его:

NSLog(@"The result of time insert is:%i", [testNum integerValue])`;

Аналогичным образом, когда вы получаете значение, вам нужно распаковать его:

Честно говоря, я немного удивлен, что это даже компиляции.

NSInteger timeNum = time;

Для чего это? Что такое "время"?

    [theResultArray addObject:timeNum atIndex:rightIndex];

Существует нет метода -addObject:atIndex:. Это -вставитьОбъект:atIndex:. Почему вы вставляете на "rightIndex" в любом случае? Почему бы просто не использовать -addObject:?

    //[theResultArray replaceObjectAtIndex:rightIndex withObject:[NSNumber numberWithInt:timeNum]];

Что это такое и почему он прокомментировал?

    NSLog(@"The right index is :%i", rightIndex);
    NSLog(@"The attempted insert time :%i", time);
    NSNumber *testNum = [theResultArray objectAtIndex:rightIndex];
    //int reso = [testNum integerValue];
    NSLog(@"The result of time insert is:%i", testNum);

Что вы пытаетесь сделать?

Вам нужно выделить память для массива в вашем init или viewDidLoad метод, в противном случае вы не сможете хранить что-либо вообще.

Если вы делаете это:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
        // Custom initialization        
        myMutableArrayName = [[NSMutableArray alloc] init];
    }
    return self;
}

Или это:

- (void)viewDidLoad {
    [super viewDidLoad];
    myMutableArrayName = [[NSMutableArray alloc] init];
}

Он должен работать для вас.

Что касается хранения integers в NSMutableArray, я взял простой, но несколько "хакиш" подход в последнее время. Я храню их как струны. Когда я ложу их в я использую:

[NSString stringWithFormat:@"%d", myInteger];

И когда я беру их я конвертировать с:

[[myArray objectAtIndex:2] intValue];

Это было очень легко осуществить, но в зависимости от контекста вы можете использовать другой способ.