无法将数据加载到表视图中

时间:2011-06-21 11:34:24

标签: objective-c cocoa-touch ipad

在我的app.i中有一些类,在一个类中,我在其他类中调用方法。在我的另一个类中,我有一个表视图和一个数组“数据”。当在这个方法中执行查询时,我将从执行查询获得的数据添加到数组,然后我调用表视图的重载数据。但令我惊讶的是,表视图没有重新加载,我没有在表视图上获得任何类型的数据。它只显示一个空白表视图。

从其他类调用的方法:

-(void)searchImagesInCategory:(NSString *)string
{
    data=[[NSMutableArray alloc]init];
    string1=string;    
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory= [paths objectAtIndex:0];
    NSString *path=[documentsDirectory stringByAppendingPathComponent:@"Table.sqlite"];

    //Open the database
    //might have to make database as property

    if(sqlite3_open([path UTF8String], &dataBase) ==SQLITE_OK)
    {
        sqlite3_stmt *statement;
        NSString *strSQL = [[NSString alloc]init];
        strSQL = @"select ImageName from tblLanguageElement where Category='";
        strSQL = [[strSQL stringByAppendingString:string1] stringByAppendingString:@"'"];

        const char *bar = [strSQL UTF8String]; 
        //strSQL = [strSQL stringByAppendingString:"''"];
        //NSLog(strSQL);
        if(sqlite3_prepare(dataBase, bar, -1, &statement, NULL) == SQLITE_OK)
        {
            while (sqlite3_step(statement) == SQLITE_ROW) 
            {
                NSLog(@"%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]);
                [data addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]];
            }

            tableView1.delegate=self;
            tableView1.dataSource=self;
        }

    }
    [tableView1 reloadData];
}

索引路径方法行的单元格: -

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView1 cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView1 dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.imageView.image= [UIImage imageNamed:[data objectAtIndex:indexPath.row]];
    return cell;        
}

为什么我没有得到重新加载的表视图。请帮忙。

谢谢,

克里斯蒂

2 个答案:

答案 0 :(得分:0)

在您的方法中,您将重新初始化“数据”数组。尝试通过在头文件中声明它然后在viewDidLoad方法调用中将其设为局部变量:

     data= [[NSMutableArray alloc]init];

此外,无需重置委托和数据源。做一次然后离开。

这是我见过的其他内容的编辑。您需要绑定您的变量,而不只是附加字符串。这是一个例子......

- (NSMutableArray*) getAllImagesForCategory:(NSString*)category {
NSMutableArray *tempArray = [[NSMutableArray alloc]init]autorelease];;

   const char *sqlStatement = "select ImageName from tblLanguageElement where Category=?";
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {

    sqlite3_bind_text(compiledStatement,1,category); //this is where you put your variable into the statement

    while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
        // Read the data from the result row

        NSString *imageName = [NSString stringWithUTF8String:(char*)sqlite3_column_text(compiledStatement, 1)];


        [tempArray addObject:imageName];

    }
} else {
    NSLog(@"ERROR: Failed to select all images with message '%s'",sqlite3_errmsg(database));
}

   // Release the compiled statement from memory
   sqlite3_finalize(compiledStatement);
   return tempArray;
}

所以这是从数据库中获取内容的SQL语句。要调用此方法,您可以这样做。

_data = [self getAllImagesForCategory];
[tableView1 reloadData];

我希望这可以帮助解决任何问题。

答案 1 :(得分:0)

确保在tableView:numberOfRowsInSection:中返回正确的号码。