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 № 1Zmodyfikuj 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ź.