/ / NSMutableArray restituisce solo l'ultimo oggetto ogni volta: obiettivo-c, ios, cacao-touch

NSMutableArray restituisce sempre solo l'ultimo oggetto: ogg-c, ios, cacao-touch

Sto sviluppando un'applicazione.In questo iam utilizzando NSMutableArray per archiviare i dati del database. Dopo aver ottenuto i dati dal database in questo array. Sto eseguendo l'operazione di ricerca su quei dati. In quel momento ogni volta che l'array restituisce solo l'ultimo oggetto. Ma al momento del recupero dei dati dal database, recupera dati diversi. Quindi per favore dimmi come risolverlo. Una parte del mio codice è mostrata di seguito.

 -(void)searchData
{
list=[db getlanguages];

for(for i=0;i<[list count];i++) {
databasefields *dbfield = [list objectAtIndex:i];
NSLog(@"%@",dbfield.lang);
}


}

In questo elenco di codici c'è NSMutableArray. Assegnarò la memoria per quello. E st la proprietà per quello.

e il codice per [db getlanguages] è sotto.

 -(NSMutableArray*)getlanguages
{
NSString *query = [NSString stringWithFormat:@"SELECT * FROM A"];
sqlite3_stmt *stStatement;
NSMutableArray *getdata = [[NSMutableArray alloc]init];
if(sqlite3_prepare_v2(dbfile, [query UTF8String], -1, &stStatement, nil)==SQLITE_OK)
{
databasefields *dbfields=[[databasefields alloc]init];
while (sqlite3_step(stStatement)==SQLITE_ROW)
{
dbfields.num=sqlite3_column_int(stStatement, 0);
dbfields.lang=[NSString stringWithUTF8String:(char*)sqlite3_column_text(stStatement, 1)];
[getdata addObject:dbfields];
[dbfields release];
}

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

sqlite3_close(dbfile);
return getdata;
}

risposte:

3 per risposta № 1

Modifica la seguente riga

 for(for i=0;i<[list count];i++) {

a

 for(int i=0;i<[list count];i++) {

e prova.

modificare

Stai usando un singolo oggetto e stai rilasciando anche quello..

Fai le tue dichiarazioni come segue:

if(sqlite3_prepare_v2(dbfile, [query UTF8String], -1, &stStatement, nil)==SQLITE_OK)
{
databasefields *dbfields = nil;
while (sqlite3_step(stStatement)==SQLITE_ROW)
{
dbfields = [[databasefields alloc]init];
dbfields.num=sqlite3_column_int(stStatement, 0);
dbfields.lang=[NSString stringWithUTF8String:(char*)sqlite3_column_text(stStatement, 1)];
[getdata addObject:dbfields];
[dbfields release];
}

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

1 per risposta № 2
for(for i =0 ?

stai mettendo due per in un ciclo?

for i dovrebbe essere int i


0 per risposta № 3

prova questo:

-(void)searchData {

for(databasefields *dbfield in [db getlanguages]) {
NSLog(@"%@",dbfield.lang);
}
}

se ciò non itera tutti gli elementi nell'array, dovrai controllare cosa viene inserito nell'array in [db getlanguages].

cose da cercare:

  • aggiungendo ogni volta lo stesso oggetto
  • non restituisce l'array corretto

senza vedere il tuo codice, è difficile indovinare quale potrebbe essere il tuo problema. forse aggiungine un po 'e posso aggiornare questa risposta.