/ / NSMutableArray zwraca za każdym razem tylko ostatni obiekt - cel-c, iOS, dotyk kakao

NSMutableArray zwraca zawsze za ostatni obiekt - object-c, ios, cocoa-touch

Tworzę jedną aplikację. W tym iamie przy użyciu NSMutableArray do przechowywania danych bazy danych. Po pobraniu danych z bazy danych do tej tablicy. Wykonuję operację wyszukiwania na tych danych. W tym czasie za każdym razem tablica zwraca tylko ostatni obiekt. Ale w momencie pobierania danych z bazy danych pobiera różne dane. Więc powiedz mi, jak rozwiązać ten problem. Część mojego kodu pokazano poniżej.

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

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


}

Na tej liście kodów znajduje się NSMutableArray. Przydzielę pamięć dla tego. I st własność dla tego.

a kod dla [db getlanguages] jest poniżej.

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

Odpowiedzi:

3 dla odpowiedzi № 1

Zmodyfikuj następujący wiersz

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

do

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

i próbuj.

Edytować

Używasz jednego obiektu i też go zwalniasz ...

Złóż następujące oświadczenia:

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 dla odpowiedzi nr 2
for(for i =0 ?

stawiasz dwa w pętli?

for i powinno być int i


0 dla odpowiedzi № 3

Spróbuj tego:

-(void)searchData {

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

jeśli to nie iteruje wszystkich elementów w tablicy, będziesz musiał sprawdzić, co jest umieszczane w tablicy w [db getlanguages].

rzeczy do poszukiwania:

  • dodając za każdym razem ten sam obiekt
  • nie zwraca poprawnej tablicy

nie widząc kodu, trudno odgadnąć, na czym polega problem. może dodać trochę tego i mogę zaktualizować tę odpowiedź.