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

时间:2012-01-19 06:44:23

标签: objective-c ios cocoa-touch

我正在开发一个应用程序。在那个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;
}

3 个答案:

答案 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]中放入数组的内容。

要寻找的东西:

  • 每次添加相同的对象
  • 没有返回正确的数组

没有看到您的代码,很难猜出您的问题可能是什么。也许添加一些,我可以更新这个答案。