2014-02-19 3 views
-2

Новое в программировании, так что извиняйтесь за любые глупые вопросы. В коде нет ошибок, но это от меня тестирование моего приложения на симуляторе. Я только что написал код, где каждый раз, когда вы нажимаете на задание, он меняет цвет и перемещает его ниже, я был так взволнован, что продолжал нажимать на них, и я нажал на тот, который уже был отмечен как завершенный, и изменил цвет, и я думаю, мой код не был подготовлен к этому, так что независимо от того, какой новый код я пишу, я просто не могу заставить приложение работать снова без сбоев. См ниже кодПриложение IOS для прекращения использования из-за неперехваченного исключения «NSRangeException», причина: «*** - [__ NSArrayM objectAtIndex:]: индекс 1 за пределами границ [0 .. 0] '

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    [[self arrayForSection:indexPath.section]removeObjectAtIndex:indexPath.row]; 
    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationBottom]; 

} 

#pragma mark - UITableViewDelegate 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    [tableView beginUpdates]; 

    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop]; 

    // Tapped an uncompleted Task. Must complete it! 

    if (indexPath.section == 0) { 
    NSString *task = self.tasks[indexPath.row]; 
    [self.tasks removeObjectAtIndex:indexPath.row]; 
    [self.completedTasks insertObject:task atIndex:0]; 

    [tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:1]] withRowAnimation:UITableViewRowAnimationTop]; 

    } 

    // Tapped a completed Task. Time to make it an uncompleted task 
    else { 
     NSString *task = self.completedTasks[indexPath.row]; 
     [self.completedTasks removeObjectAtIndex:indexPath.row]; 
     [self.tasks insertObject:task atIndex:0]; 

     [tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:1]] withRowAnimation:UITableViewRowAnimationTop]; 

    } 

    [tableView endUpdates]; 

    [self save]; 
} 
+1

Вы получаете доступ к элементу по индексу 1, но массив пуст. Печатайте массивы, чтобы выяснить, где вы это делаете. –

+0

Прочитайте сообщение об исключении * очень внимательно *. Затем наблюдайте трассировку стека исключений, которая указывает вас на неудачную операцию. –

+0

Вы все замечательно благодарите за ответ. Я продолжу поиск и поиск – user3320964

ответ

0

использования [Count массива] этот метод проверки «completedTasks» пуст или нет, U не может получить данные из пустого массива.

2

Вы пытаетесь получить доступ к некоторым несуществующим данным на одном из ваших массивов.

[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0] 

говорит, что ваш массив имеет 0 объектов, и вы пытаетесь получить доступ к объекту с индексом 1 (никто). Это является причиной ошибки.

Перед тем, как получить или удалить элемент из любого массива, вы должны использовать защитное программирование. Нечто вроде:

if ([array count] < index) 
{ 
    [array removeObjectAtIndex: index]; 
    NSString *string1 = [array objectAtIndex: index]; 
    NSString *string2 = array[index]; 
} 
+0

Я создаю класс для начинающих с помощью веб-видео, поэтому, хотя я понимаю, что вы говорите, я боюсь прямо сейчас, чтобы вставить что-то другое, и беспокоиться, что это изменит другие вещи и получит больше смущенный. Мне, возможно, нужно вернуться с самого начала и переосмыслить концепции, потому что это помогло мне понять это – user3320964

Смежные вопросы

 Смежные вопросы