在我的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;
}
为什么我没有得到重新加载的表视图。请帮忙。
谢谢,
克里斯蒂
答案 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:
中返回正确的号码。