Nano Hash - криптовалюты, майнинг, программирование

Исключение за пределами границ в NSArray, которое пусто

У меня есть этот код для создания массива изображений для отображения в представлении. Большинство страниц в моем представлении будут иметь 20 изображений (в столбцах по 5, в строках по 4), но на самом деле у меня 43 изображения, и когда мой массив изображений содержит последние 3, я получаю исключение, когда на 4-й итерации внутреннего цикл, массив пустой.

- (void)displayImages:(NSMutableArray *)images {

NSMutableArray *keysArray = [[NSMutableArray alloc] initWithCapacity:5];

for (int column = 0; column < 5; column++){
    [keysArray  addObject:[NSMutableArray arrayWithCapacity:5]];
    for (int row = 0; row < 4; row++) {
        [[keysArray objectAtIndex:column] addObject:[images objectAtIndex:0]];
        [images removeObjectAtIndex:0];
    }
}

....

Могу ли я обойти это?

Спасибо.

РЕДАКТИРОВАТЬ:

За этим кодом следует код, который фактически извлекает изображение из массива. Но происходит тот же сценарий... на четвертой итерации происходит сбой.

for (int column = 0; column < 5; column++) {
    for (int row = 0; row < 4; row++){          
        UIButton *keyButton = [UIButton buttonWithType:UIButtonTypeCustom];
        keyButton.frame = CGRectMake(column*kKeyGap, row*kKeyGap, kKeySize, kKeySize);

        [keyButton setImage:[[keysArray objectAtIndex:column] objectAtIndex:row] forState:UIControlStateNormal];
        [keyButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:keyButton];
    }
}
[keysArray release];

На данный момент я не могу проверить images, так как массив уже пуст.


Ответы:


1

Попробуйте использовать фактические размеры массива вместо постоянных значений в ваших текстовых выражениях цикла for. Итак, вместо этого:

for (int column = 0; column < 5; column++)

сделай это:

for (int column = 0; column < [keysArray count]; column++)

Полученный код может выглядеть примерно так:

for (int column = 0; column < [keysArray count]; column++) {

    NSArray *rowArray = [keysArray objectAtIndex:column];

    for (int row = 0; row < [rowArray count]; row++) {          
        UIButton *keyButton = [UIButton buttonWithType:UIButtonTypeCustom];
        keyButton.frame = CGRectMake(column*kKeyGap, row*kKeyGap, kKeySize, kKeySize);

        [keyButton setImage:[rowArray objectAtIndex:row] forState:UIControlStateNormal];
        [keyButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:keyButton];
    }
}

Между прочим, вложенные выражения сообщений иногда могут быть крутыми, но вложенные вызовы objectAtIndex:, вероятно, никогда не были хорошей идеей.

23.11.2010

2

Просто проверьте, есть ли объекты в этом массиве, прежде чем пытаться что-либо с ним сделать.

- (void)displayImages:(NSMutableArray *)images { 

NSMutableArray *keysArray = [[NSMutableArray alloc] initWithCapacity:5]; 

for (int column = 0; column < 5; column++){ 
    [keysArray  addObject:[NSMutableArray arrayWithCapacity:5]]; 
    for (int row = 0; row < 4; row++) { 
        //test to see if there's an object left in the inner array
        if ([images count] > 0) {
            [[keysArray objectAtIndex:column] addObject:[images objectAtIndex:0]]; 
            [images removeObjectAtIndex:0];
        }
    } 
} 
23.11.2010

3

проверить количество объектов в images

23.11.2010
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..