NSInternalInconsistencyException при попытке динамически изменить количество строк в UITableView - PullRequest
0 голосов
/ 24 июня 2011

Я пытаюсь использовать insertRowsAtIndexPaths, чтобы я мог вставить строку таблицы.Я получаю эту ошибку:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',      reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (0) must be equal to the number of rows contained in that section before the update (0), plus or minus the number of rows inserted or deleted from that section (1 inserted, 0 deleted).'

Я пытаюсь динамически изменить количество строк в разделе, пытаясь устранить проблему:

NSArray *indexPathIndex = [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:0   inSection:0], nil];    
[myTableView beginUpdates];
//***** HERE I AM TRYING TO DYNAMICALLY INCREASE NUMBER OF ROWS
[myTableView numberOfRowsInSection:1];
////////////////////////////////////////////////////////////
[myTableView insertRowsAtIndexPaths:indexPathIndex   withRowAnimation:UITableViewRowAnimationTop];
[myTableView endUpdates];

Первоначальномое число строк в разделе равно 0. Я пытаюсь увеличить это число в своих усилиях по устранению вышеупомянутой ошибки, однако код [myTableView numberOfRowsInSection: 1], похоже, не имеет никакого эффекта.

Может кто-нибудь подсказать, как яможно решить эту проблему?

Спасибо, Виктор.

Ответы [ 3 ]

0 голосов
/ 24 июня 2011

Посмотрите на протокол UITableViewDataSource , в частности, метод tableView:numberOfRowsInSection.Это позволит вам динамически устанавливать количество строк в разделе.

0 голосов
/ 24 июня 2011

У tableView есть источник данных, который обычно является массивом, который вы можете использовать для заполнения ячеек tableView.

- (UITableViewCell*)tableView cellForRowAtIndexPath..... {
    //Dequeueing or alloc-init-ing a cell
    SomeClass *someObject = [someArray objectAtIndex:indexPath.row]; // Something
    // like this, where someArray becomes the source array.
    ...
}

Теперь в другой части вашего кода, если вы хотите динамически изменитьсодержимое tableView, измените someArray, а затем измените tableView.

[someArray insertObjectAtIndex:someIndex];
[myTableView insertRowsAtIndexPaths....];  //The indexPath is generally
// consistent with the someIndex.
0 голосов
/ 24 июня 2011

Вы не должны устанавливать количество строк самостоятельно, UITableView управляет этим самостоятельно. Удалить строку.

myTableView numberOfRowsInSection:1]; 
...