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;
}
修改下面一行
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);
}
}
没有用。同样的结果。 – user1157838
我编辑了我的答案。替换'if'块.. – Ilanchezhian
是否有任何需要为getdata分配内存? – user1157838
for(for i =0 ?
你把两个在一个循环?
for i
应该int i
那个也给出了相同的结果 – user1157838
什么是NSLog和alss NSLog [list count] – Shubhank
Nslog打印对象.For [list count]返回对象数 – user1157838
试试这个:
-(void)searchData {
for(databasefields *dbfield in [db getlanguages]) {
NSLog(@"%@",dbfield.lang);
}
}
如果不遍历数组中的所有项目,你将需要检查的是什么投入在[DB getlanguages数组]。
的事情,寻找:
- 没有看到你的代码没有返回正确的数组
每次加相同的对象,这是很难猜测你的问题可能是什么。也许增加一些,我可以更新这个答案。
Iam已经发布了我的代码。看到一个 – user1157838
对不起,当你这样做时,我一定会打字。 @Aadhira的答案看起来不错,但是,您还需要使用'return [getdata autorelease];'作为getlanguages方法的最后一行。 – unsynchronized
显示代码“getlanguages” –
上面的代码似乎没有错。我认为问题出现在'[db getlanguages]'里面。 '[list count]'是如何? –
您是否尝试过记录“列表”? –