NSMutableArray每次只返回最后一个对象

问题描述:

我正在开发一个应用程序。在那个使用NSMutableArray存储数据库数据的iam。从数据库中获取数据到这个数组后。我正在对该数据执行搜索操作。在那个时候,每次该数组只返回最后一个对象。但在从数据库中检索数据时,它会检索不同的数据。所以请告诉我如何解决这个问题。我的部分代码如下所示。NSMutableArray每次只返回最后一个对象

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

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


} 

在这个代码列表中是NSMutableArray.I将为其分配内存。那是一个属性。

以下代码为[db getlanguages]。

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

显示代码“getlanguages” –

+0

上面的代码似乎没有错。我认为问题出现在'[db getlanguages]'里面。 '[list count]'是如何? –

+0

您是否尝试过记录“列表”? –

修改下面一行

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

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

和尝试。

编辑

您使用的是单一的对象和你释放那太..

让您的语句如下:

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); 
    } 
} 
+0

没有用。同样的结果。 – user1157838

+0

我编辑了我的答案。替换'if'块.. – Ilanchezhian

+0

是否有任何需要为getdata分配内存? – user1157838

for(for i =0 ? 

你把两个在一个循环?

for i应该int i

+0

那个也给出了相同的结果 – user1157838

+0

什么是NSLog和alss NSLog [list count] – Shubhank

+0

Nslog打印对象.For [list count]返回对象数 – user1157838

试试这个:

-(void)searchData { 

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

如果不遍历数组中的所有项目,你将需要检查的是什么投入在[DB getlanguages数组]。

的事情,寻找:

  • 没有看到你的代码没有返回正确的数组

每次加相同的对象,这是很难猜测你的问题可能是什么。也许增加一些,我可以更新这个答案。

+0

Iam已经发布了我的代码。看到一个 – user1157838

+0

对不起,当你这样做时,我一定会打字。 @Aadhira的答案看起来不错,但是,您还需要使用'return [getdata autorelease];'作为getlanguages方法的最后一行。 – unsynchronized