tableView numberOfRowsInSection - PullRequest
       2

tableView numberOfRowsInSection

1 голос
/ 22 июня 2011

У меня есть эта ошибка в xcode:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 6 beyond bounds [0 .. 5]'
*** Call stack at first throw:

Я использую этот код:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.

    int num_rows = 0;

    switch (section) {
        case 0:{
            num_rows = [messageReceive count];
        }
            break;
        case 1:{
            num_rows = [messageSend count];
        }
            break;


    return num_rows;    
}

, но я пробую много кода, но ту же ошибку.Я использовал UITableView, чтобы получить сообщение из скрипта php с Json.В «messageReceive» иногда у меня есть 0 или 1 или много сообщений.то же самое для messageSend.

thx

это моя ячейкаForRowAtIndexPath

// Configure the cell.


    NSDictionary * dictMessReceive = [self.messageReceive objectAtIndex:indexPath.row];
    NSDictionary * dictMessSend = [self.messageSend objectAtIndex:indexPath.row];

    switch ( indexPath.section )
    {
        case 0: 
            if (pseudoLabel.text =[dictMessSend  objectForKey:@"sender"] )

    {cell.detailTextLabel.text = [dictMessSend  objectForKey:@"receiver"];
    cell.text= [dictMessSend  objectForKey:@"message"];
            }
            break;


        case 1:             
            if (pseudoLabel.text =[dictMessReceive  objectForKey:@"receiver"] ) 
            {cell.detailTextLabel.text = [dictMessReceive  objectForKey:@"sender"];
        cell.text= [dictMessReceive  objectForKey:@"message"];

                }

            else {
                //cell.text = @"No message";
            }

            break;

    }   


    return cell;

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Где возбуждается исключение? Ни в каком месте кода, который вы разместили, это исключение не может возникнуть, если вы не внедрили собственный метод подсчета. Поэтому я предполагаю, что исключение поднимается в tableView:cellForRowAtIndexPath:. Внутри этого метода (или любых других подобных методов) убедитесь, что вы используете ту же логику.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch (indexPath.section) {
        case 0:{
            //messageReceive logic
        }
        break;
        case 1:{
            //messageSend logic
        }
        break;
    }
}

Следующее, что вы хотите сделать, это убедиться, что messageReceive и messageSend не являются изменяемыми (ваш вывод консоли показывает, что он изменчив). Если они являются свойствами, то они должны быть NSArray и быть настроены на копирование без сохранения (например, @property(nonatomic, copy) NSArray *messageReceive; в противном случае код должен выглядеть как messageReceive = [sourceArray copy];

Обновление:

В предоставленном вами обновлении показано, что проблема в следующей строке

NSDictionary * dictMessReceive = [self.messageReceive objectAtIndex:indexPath.row];
NSDictionary * dictMessSend = [self.messageSend objectAtIndex:indexPath.row];

Вы не можете получить доступ к обоим массивам с одним и тем же индексом, переместите это в оператор switch

NSDictionary * dictMessReceive = nil;
NSDictionary * dictMessSend = nil;

switch ( indexPath.section )
{
    case 0: 
        dictMessageReceive = [self.messageReceive objectAtIndex:indexPath.row];
        //...
        break;
    case 1:
        dictMessSend = [self.messageSend objectAtIndex:indexPath.row];
        //...
        break;
}
0 голосов
/ 22 июня 2011

опубликуйте свой метод cellForRowAtIndexPath, в котором вы ошибаетесь, возможно, вы используете неправильный массив для определенных разделов ... Так что для раздела 0 вы используете полученные сообщения (которые могут быть 5), а в cellForRowAtIndexPath вы читаете из массив отправленных сообщений, который меньше 5, и, таким образом, вы получаете исключение вне границ ..

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