iOS NSMutableArray insertObject index вне границ - PullRequest
0 голосов
/ 05 декабря 2010

Я новичок в программировании на Objective-C, поэтому прошу прощения за неудачный вопрос.

Я пытаюсь написать какое-то простое приложение, которое бы добавляло отдельные числа, хранящиеся в NSMutableArray, в табличное представление.

Вот код инициализации и код для метода addItem ():

- (void)viewDidLoad {
    [super viewDidLoad];

    self.title = @"Test App";
    self.navigationItem.leftBarButtonItem = self.editButtonItem;

    addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd   target:self action:@selector(addItem)];
    self.navigationItem.rightBarButtonItem = addButton;

    self.itemArray = [[NSMutableArray alloc] initWithCapacity:100];
}

- (void)addItem {
    [itemArray insertObject:@"1" atIndex:0];

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}

Эта строка

[itemArray insertObject:@"1" atIndex:0];

выдает следующую ошибку:

*** -[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array'

Почему индекс 0 выходит за границы для пустого массива и что я делаю неправильно ???

UPD

Как указал BP, вставка в массив может не работать дляпустой массив, поэтому я добавил следующую проверку:

if ([itemArray count] == 0) {
    [itemArray addObject:@"1"];     
} else {
    [itemArray insertObject:@"1" atIndex:0];
}

Итак, теперь я получаю то же сообщение об ошибке, но в строке

[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

Есть идеи, что с ним может быть не так?

Ответы [ 2 ]

2 голосов
/ 05 декабря 2010

Звонок, который вы делаете в insertRowsAtIndexPaths:withRowAnimation: должен быть между beginUpdates и endUpdates вызовом на вашем tableView.

Проверьте Руководство по программированию TableView .

0 голосов
/ 05 декабря 2010

Метод initWithCapacity выделяет только память для объектов, он фактически не создает количество объектов, указанных в вашем массиве.

Я не уверен, что вы можете вставить в массив, который не имеет объектов впока нет, так что вы можете попробовать использовать метод addObject, если число массивов равно 0, а метод insertObject в противном случае.

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