2013-08-04 132 views
0

我是新的objective-c developpment,我需要找到一种方法来刷新我的tableview。刷新tableview无法正常工作

我有2 UIViewController s,在第二个插入数据到我的数据库,然后我实例化第一个viewcontroller,它包含我的tableview。我打电话的方法是允许它从数据库中恢复所有数据,但是当我使用[tableview reloadData]时,什么也没有发生,并且cellforrowatindexpath未被调用。

econdviewcontroller: //我插入数据库中的数据和我实例化类,其中我的tableview是并调用刷新方法

first = [[FirstviewController alloc]initWithNibName:@"FirstviewController" bundle:nil]; 

[first refreshList]; 
在Firstviewcontroller

-(void)refreshList{ 

    self.tableview= [[[UITableView alloc] initWithFrame:self.view.bounds] autorelease]; 
    tableview.dataSource = self; 
    tableview.delegate = self; 

    NSMutableArray *array = [[NSMutableArray alloc] init]; 
    //I recover my data from data base 

    IPADAGRIONEActivityList *arrayActivities = [IPADAGRIONEActivity findAll]; 

    if ([arrayActivities length] > 0) 
    { 
     for (IPADAGRIONEActivity * oneRec in arrayActivities) 
     { 
      [array addObject:oneRec]; 


     } 
    } 
    //activities is NSMutablearray that contains all my data 
    self.activities = array; 

    //I build dictionnary 
    [self buildObjectsDictionnary:activities 

    NSLog(@"self.act%@",self.tableview); 
    [array release]; 
    [self.tableview reloadData]; 
} 

// numberofrowsinSection:

NSLog(@"rows%d",[[objects objectForKey:[objectsIndex objectAtIndex:section]] count]); 
return [[objects objectForKey:[objectsIndex objectAtIndex:section]] ; 

// numberOfSection:

NSLog(@"nbre of section%d",[objectsIndex count]); 
return [objectsIndex count];} 

// CellforRowatInddexPath:它这么想的,以这种方法

if (cell== nil) { 
    cell = [[MHCActivityListCell alloc]init]; 
} 

IPADAGRIONEActivity *activite; 

cell.activityCategory.text = [NSString stringWithFormat:@"%@", [activite EMAIL]]; 
+1

显示你的代码。你有没有设置连接到数据存储(调试)和表代表(调试)? – Wain

+1

你有没有设置tableView的委托和数据源? – TheTiger

+0

这些日志告诉您关于行数和部分的数量?并且您是否将代码复制并粘贴到问题中,因为您实际上并未返回行数的计数。任何构建警告? – Wain

回答

0

您实例每次调用-refreshList一次新的tableview访问。请记住,tableView是一个视图,因此需要将其添加为子视图。

一旦你明白了,你会发现没有理由alloc+init一个新的tableView实例每次你需要它刷新(如果,因为任何原因你需要它,你需要添加tableView作为子视图再次)。基本上,您需要确保正在显示的tableView与您存储在tableView属性中的tableView相同。

+0

如果我没有insranciate tableview,如果我登录(self.tablebiew)它返回空值,然后[tableview reloaddata]没有影响 –

+0

您的tableView财产并不是一个强大的财产。你应该从启动时删除'autorelease'(或者将属性改为strong/retain而不是weak/assign) –

+0

我不明白为什么我没有访问cellforrowatindex路径,但是我可以访问numberofrows和numberofsection –

0

正如前面提到的布鲁诺,你每次都在实例化你的tableview,这不是正确的方法。您需要刷新具有原始数据的同一个tableview。

在刷新列表

做这样的事情

-(void) refreshList 
{ 
    // Get a reference to your viewcontroller's tableview 

    UITableview *tableview = [self tableview]; 

    // Do your data manipulation 

    [tableview reloadData]; 

}