2012-02-06 6 views
1

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

-(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 класса, где я получаю все ДАННЫЕ из базы данных.

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

+0

, что это значение в numberOfRowsInSection класса UITableView ?? – Sarah

+0

@Sarah: Его 100, поскольку данные в базе данных 100. – hgpl

ответ

1

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

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

1

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

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

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

+0

Луис: Большое спасибо. Это работает. – hgpl

0

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

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

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

Также вам не нужно для цикла, Вместо сделать это таким образом:

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

Также сохраняйте NSMutableArray после allPreActions = [preAction getDataFromDatabase]; – Sarah

0

Объявить 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; 
} 
Смежные вопросы