我正在开发一个应用程序。在那个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 :(得分:3)
修改以下行
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);
}
}
答案 1 :(得分:1)
for(for i =0 ?
你正在把两个人放在一个循环中吗?
for i
应为int i
答案 2 :(得分:0)
试试这个:
-(void)searchData {
for(databasefields *dbfield in [db getlanguages]) {
NSLog(@"%@",dbfield.lang);
}
}
如果不迭代数组中的所有项,则需要检查[db getlanguages]中放入数组的内容。
要寻找的东西:
没有看到您的代码,很难猜出您的问题可能是什么。也许添加一些,我可以更新这个答案。