Проблема с несколькими навигационными контроллерами в tabbarcontroller, который указывает на один подробный вид - PullRequest
1 голос
/ 19 августа 2011

У меня есть приложение, в котором есть один tabbarcontroller, который содержит навигационный контроллер для каждой вкладки.Каждый навигационный контроллер заканчивается контроллером представления с именем DetailViewController.Но если пользователь переходит к DetailViewController на одной вкладке, а затем переключается на вкладку и там тоже переходит к DetailViewController, и приложение вылетает с ошибкой:

2011-08-19 21:14:45.257 Kluringar[4368:ef03] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 0]'

Код, который выдвигает DetailViewController, выглядит следующим образом:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    kluringIdString = [[kluringar objectAtIndex:indexPath.row] objectForKey:@"id"];
    DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"];
    [self.navigationController pushViewController:detail animated:YES];
}

Код, который получает данные из базы данных и добавляет их в массив, выглядит следующим образом:

-(void) getAllRowsFromTableNamed {
    //—-retrieve rows—- 
    NSString *qsql = [NSString stringWithFormat:@"SELECT * FROM Kluringar ORDER BY rubrik"];    
    sqlite3_stmt *statement;    
    kluringar = [[NSMutableArray alloc] init];
    NSMutableDictionary *kluringarDictionary = [[NSMutableDictionary alloc] init];
    if (sqlite3_prepare_v2( db, [qsql UTF8String], -1, &statement, nil) == SQLITE_OK) {     
        while (sqlite3_step(statement) == SQLITE_ROW) {
            char *kluringId = (char *) sqlite3_column_text(statement, 2);           
            NSString *kluringIdStr = [[NSString alloc] initWithUTF8String: kluringId];
            char *rubrik = (char *) sqlite3_column_text(statement, 3);          
            NSString *rubrikStr = [[NSString alloc] initWithUTF8String: rubrik];
            //---add items--- 
            [kluringarDictionary setValue:kluringIdStr forKey:@"id"];
            [kluringarDictionary setValue:rubrikStr forKey:@"rubrik"];
            [kluringar addObject:[kluringarDictionary copy]];       
        }   
        //—-deletes the compiled statement from memory—-        
        sqlite3_finalize(statement);        
    }   
}

Вот ссылка на раскадровку: раскадровка

Заранее!:)

1 Ответ

0 голосов
/ 19 августа 2011

Вы пытаетесь получить доступ к массиву в этой строке

kluringIdString = [[kluringar objectAtIndex:indexPath.row] objectForKey:@"id"];

, в котором должно быть несколько элементов, но это не так. Я бы посоветовал вам просмотреть свой код и посмотреть, сколько элементов добавлено в массив kluringar.

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