iOS tableview несколько разделов

у меня проблема с приведенным ниже кодом на iOS, у меня есть 3 раздела, и каждый раздел имеет определенное количество строк, которое определяется функцией: countcells.

Но каждый раз, когда я запускаю его, у меня возникает одна и та же ошибка: 2014-07-29 22:16:32.710 TYM-APP[5598:60b] * Завершение работы приложения из-за необработанного исключения «NSRangeException», причина: «* -[__NSArrayI objectAtIndex:]: индекс 2 выходит за пределы [0 .. 0]'

Что не так с кодом??

  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
   return 3;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   if (section == 0)
   {
       NSString *querySQL = [NSString stringWithFormat: @"SELECT count(*) FROM homedata where module_ID= 77"];
       return [self countcells:querySQL];
   }
   else if(section == 1)
   {
       NSString *querySQL = [NSString stringWithFormat: @"SELECT count(*) FROM homedata where module_ID= 78"];
       return  [self countcells:querySQL];
   }

   else if (section == 2)
   {
       return[self countcells:@"SELECT count(*) FROM homedata where module_ID= 81"];
   }
   else return 0;
}


- (int) countcells: (NSString *)query
{
   int e;

   NSString* text;
   NSString * paths=[self getWritableDBPath];

   const char *dbpath =  [paths UTF8String];
   sqlite3_stmt    *statement;
   static sqlite3 *database = nil;

   if (sqlite3_open(dbpath, &database) == SQLITE_OK)
   {
      NSString *querySQL = [NSString stringWithFormat:query];

      const char *query_stmt = [querySQL UTF8String];

      //  NSLog(@"Databasae opened = %@", userN);

      if (sqlite3_prepare_v2(database,
                           query_stmt, -1, &statement, NULL) == SQLITE_OK)
      {

         while(sqlite3_step(statement) == SQLITE_ROW)
         {
            text = [[NSString alloc]initWithUTF8String:(const char *)     sqlite3_column_text(statement, 0)];
            e = sqlite3_column_int(statement, 0);
            NSLog( @"Valeur directe: %d", e);
         }
         //  username.text=@"No Username";


         sqlite3_finalize(statement);
      }
      //  NSLog( @"Save Error: %s", sqlite3_errmsg(database) );
      NSLog( @"Count Value: %@", text);
      sqlite3_close(database);
   }

   return e;
}

person ralph    schedule 29.07.2014    source источник
comment
Ой! Эти табличные методы вызываются снова и снова. Сделайте запросы один раз и сохраните результаты. Открытие и закрытие базы данных так много раз ужасно неэффективно, поскольку эти запросы повторяются снова и снова без необходимости.   -  person rmaddy    schedule 29.07.2014
comment
Какая строка кода вызывает ошибку?   -  person rmaddy    schedule 29.07.2014
comment
он не входит в первое и второе состояние. он входит только в третье условие (если section ==2 ) и там падает. что касается раздела = 0 и раздела = 1, он не обращается к ним   -  person ralph    schedule 29.07.2014
comment
я что-то исправил, но теперь ошибка индекса 1 за пределами [0 .. 0]. в раскадровке я создал таблицу с 3 разделами. Должно ли работать нет?   -  person ralph    schedule 29.07.2014
comment
Еще раз - какая строка кода вызывает ошибку?   -  person rmaddy    schedule 29.07.2014
comment
Можете ли вы добавить Exception Breakpoint и сказать, где он останавливается.   -  person sumofighter666    schedule 30.07.2014
comment
Вы уверены, что это не где-то около -tableView:cellForRowAtIndePath: метода делегата?   -  person sumofighter666    schedule 30.07.2014
comment
хорошо, я, наконец, получил его на работу. оказывается, мне нужно изменить тип таблицы на динамический прототип.   -  person ralph    schedule 30.07.2014


Ответы (1)


int e имеет мусорное значение. убедитесь, что оно должно быть >= 0 значение.

person Wagh    schedule 29.07.2014