开发者

tableView numberOfRowsInSection

开发者 https://www.devze.com 2023-03-14 22:40 出处:网络
I have this error in xcode: Terminating app due to uncaught exception \'NSRangeException\', reason: \'*** -[NSMutableArray objectAtIndex:]: index 6 beyond bounds [0 .. 5]\'

I have this error in xcode:

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

I using this code:

- (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;    
}

but i try many code but the same error. I using a UITableView to get message from a script php with Json. In "messageReceive" sometimes i have 0 or 1 or many messages. the same for messageSend.

thx

this is my cellForRowAtIndexPath

// 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;


Where is the exception being raised? No where in the code you posted could that exception be raised unless you implemented a custom count method. So I will assume the exception is being raised in tableView:cellForRowAtIndexPath:. Inside of that method (or any other similar methods) make sure you use the same logic.

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

Next thing you want to do is make sure that messageReceive and messageSend are not mutable (your console output shows it was mutable). If they are properties then they should be an NSArray and set to copy not retain (ex. @property(nonatomic, copy) NSArray *messageReceive; otherwise the code should look like messageReceive = [sourceArray copy];

Update:

The update you provide shows the problem is on the following line

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

You can not access both arrays with the same index, move that into the switch statement

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;
}


post your cellForRowAtIndexPath method, thats where you are going wrong, you are probably using the wrong array for certain sections...So for section 0 you use messages received (which might be 5) and in cellForRowAtIndexPath you are reading from the messages sent array which is less that 5, and so you get the out of bounds exception..

0

精彩评论

暂无评论...
验证码 换一张
取 消