Вставить данные из базы данных в таблицу - PullRequest
1 голос
/ 06 февраля 2012

Я хочу вставить данные из базы данных в таблицу. Я могу получить данные из базы данных и вставить их в таблицу, но только последние данные вставляются во все строки таблицы. Я использовал код как

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
     Action *actionInformation;

    if(cell == nil){


        cell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(0, 0, 320, 460) reuseIdentifier:@"MyIdentifier"] autorelease];

        PrepopulatedActionsDao * preAction = [[PrepopulatedActionsDao alloc] init];

        [preAction getDataFromDatabase];

        NSMutableArray *allPreActions=[preAction getDataFromDatabase];

        for(int i=0;i<[allPreActions count];i++){

            actionInformation=[allPreActions objectAtIndex:i];


            cell.textLabel.text = [NSString stringWithFormat: @"%@",actionInformation.action];

        }
    }
    return cell;
}

Здесь PrepopulatedActionsDao - это класс, в котором я получаю все данные из базы данных.

Я хочу вставить в таблицу все данные базы данных, а не только последние. Пожалуйста, помогите.

Ответы [ 4 ]

1 голос
/ 06 февраля 2012

Нет необходимости в цикле for.Метод cellforrow вызывается для каждой строки в табличном представлении.Так что вам просто нужно поставить следующую строку cell.textLabel.text = [NSString stringWithFormat: @"%@",[[allPreActions objectAtIndex:indexPath.row] action]; вместо цикла for.

Надеюсь, это решит вашу проблему.

1 голос
/ 06 февраля 2012

cellForRowAtIndexPath будет вызываться для каждой строки, поэтому необходимо указывать правильные данные в каждом вызове.Таким образом, вместо «цикла for» вы можете выполнить

actionInformation=[allPreActions objectAtIndex:[indexPath row]];
cell.textLabel.text = [NSString stringWithFormat: @"%@",actionInformation.action];

Вы также можете кэшировать allPreActions вместо заполнения его при каждом вызове.

0 голосов
/ 06 февраля 2012

Объявите NSMutableArray член allPreActions в файле .h (Объявите его как член класса) и заполните его в viewDidLoad или где-то еще до cellForRowAtIndexPath:

Таким образом, этот код появится в viewDidLoad

PrepopulatedActionsDao * preAction = [[PrepopulatedActionsDao alloc] init];

if( allPreActions )
{
   [allPreActions releaseAllObjects];
   [allPreActions release];
}

allPreActions = [[preAction getDataFromDatabase] retain];
[preAction release];

А ваш cellForRowAtIndexPath: будет выглядеть следующим образом

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
    Action *actionInformation;

    if(cell == nil){
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(0, 0, 320, 460) reuseIdentifier:@"MyIdentifier"] autorelease];
    }
    actionInformation=[allPreActions objectAtIndex:indexPath.row];
    cell.textLabel.text = [NSString stringWithFormat: @"%@",actionInformation.action];

    return cell;
}
0 голосов
/ 06 февраля 2012

Это распределяется каждый раз.Так что объявите это снаружи.

PrepopulatedActionsDao * preAction = [[PrepopulatedActionsDao alloc] init];

[preAction getDataFromDatabase];
  NSMutableArray *allPreActions=[preAction getDataFromDatabase];

Также вам не нужен цикл, вместо этого сделайте это следующим образом:

    actionInformation=[allPreActions objectAtIndex:indexpath.row];
    cell.textLabel.text = [NSString stringWithFormat: @"%@",actionInformation.action];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...