Невозможно загрузить данные в табличное представление - PullRequest
0 голосов
/ 21 июня 2011

В моем 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;        
}

Почему я не получаю перезагрузку таблицы. Пожалуйста, помогите.

Спасибо

Christy

Ответы [ 2 ]

0 голосов
/ 21 июня 2011

Убедитесь, что вы возвращаете правильный номер в tableView:numberOfRowsInSection:.

0 голосов
/ 21 июня 2011

В вашем методе вы повторно инициализируете свой массив данных. Попробуйте сделать это локальной переменной, объявив ее в заголовочном файле, а затем в вызове метода 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];

Надеюсь, это поможет на любые вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...