2012-07-02 14 views
5

Recibo este error: [NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array aunque tengo 75 elementos en mi base de datos. ¿Por qué me está mostrando este error? Estoy tratando de obtener los elementos desde mi base de datos, pero me dice índice 0.[NSMutableArray objectAtIndex:]: índice 0 más allá de los límites para la matriz vacía '

+(NSMutableArray *)GetAttitudeItems 
{ 
    NSArray *arrDocPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *strDestPath = [NSString stringWithFormat:@"%@/ItemsAndCategory.sqlite",[arrDocPath objectAtIndex:0]]; 


//sqlite3 *sqlite; 

NSMutableArray *arrItemsList; 
if(sqlite3_open([strDestPath UTF8String],&database)==SQLITE_OK) 
{ 

    const char *strQuery = "SELECT * FROM Items WHERE CategoryName='ATTITUDE' ORDER BY RANDOM()"; 
    NSLog(@"The value is %s",strQuery); 
    sqlite3_stmt *stmt; 
    //char *err; 

    arrItemsList = [[NSMutableArray alloc]init]; 

    if(sqlite3_prepare_v2(database, strQuery , -1,&stmt, NULL)==SQLITE_OK) 
    { 
     while (sqlite3_step(stmt)==SQLITE_ROW) 
     { 

      NSString *StrCatename = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 1)]; 
      NSString *StrItemName = [NSString stringWithUTF8String:(char*)sqlite3_column_text(stmt, 0)]; 

      Itemslist *itemlist = [[Itemslist alloc]init]; 
      itemlist.CategoryValue = StrCatename; 
      itemlist.ItemValue =StrItemName; 
      [arrItemsList addObject:itemlist]; 

     } 

    } 

    if (stmt!=nil) 
    { 
     sqlite3_finalize(stmt); 
    } 
} 



sqlite3_close(database); 

return arrItemsList; 

}

+0

Comprobar que el texto esté vacío o no? –

+0

verifique [arrItemsList Count]; – Deepesh

Respuesta

2

Si se tiene la certeza de que sus llamadas DB deben devolver datos, me aseguraría de que al menos uno de sus declaraciones if() else() en realidad están siendo golpeadas. De lo contrario, su matriz está vacía ya que ha inicializado por encima de:

NSMutableArray *arrAlert = [[NSMutableArray alloc]init];

Una forma sencilla de comprobar por sí mismo habría que añadir una declaración else en la parte inferior de su ifelse cadena, y afirmar algo allí (es decir, al menos imprimir algo, para empezar.)

+0

bien. en realidad, esta aplicación funciona bien al principio, de repente aparece este error ... – user1482192

+0

Ya la otra parte está funcionando bien ... – user1482192

Cuestiones relacionadas