在UITableViewController类里添加了一个tableview1,里面刷新界面数据的函数如下
-(void)refreshView:(BOOL)flag
{
    if (flag == YES)
    {
    [self getData:nil];
    [self.tableView1 reloadData];
    }
}在B类中当数据改变时调用上边的函数
View1是上边类的实例
 [View1 refreshView:flag];
这样reloadData   虽然执行了 但是界面数据并没有更新,- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
等函数也都没有调用
求大神帮忙解决一下

解决方案 »

  1.   

    你打断点看看有没有调用那个refreshView方法里面去,有没有重新刷新,有没有拿到数据如果有重新设置,有拿到数据,就看看显示的时候是不是那里少些了什么??。。我记得以前我写的时候,不止在一个地方写了 [self.tableView1 reloadData];这句话
      

  2.   

    是没有刷新成功吧?是不是你在tableviewcell*函数中的值没改变呀
      

  3.   

    refreshView方法里的数据都改变了 只是reloadData方法调用的时候,没有调用- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section等函数
     reloadData函数都在哪些地方调用啊?
      

  4.   

    refreshView方法里的数据都改变了 只是reloadData方法调用的时候,没有调用- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section等函数
     reloadData函数都在哪些地方调用啊?没有调用那些函数,就看看delegate和data设置没有reloadData函数在你需要重新刷新cell里面的内容的时候调用。
      

  5.   

    我把代理设置的那个写到这个函数里面了,也没有调用那个函数啊
    -(void)refreshView:(BOOL)flag
    {
       [tableview1 setDelegate:self];
       [tableview1 setDatasoure:self];
       ...}
    大概这么写的,但是也不行啊,会不会因为在B类里的实例和我要刷新的界面不是同一个造成的?
      

  6.   

    既然已经执行到 reloadData ,但tableview的代理方法 ... numberOfRowsInSection却没有被执行,最有可能的原因是tableview的delegate,datasource未指定。仔细检查有没有这两句self.tableView1.delegate=self;
    self.tableView1.datasource=self;再者检查页面有没有如下代码的设置
    self.tableview1.delegate=nil;
    self.tableview1.datasource=nil;这样也会让你先前的设置失效。还有你上面中有提到“在B类中当数据改变时调用上边的函数”
    view1在B类中是引用的关系? 像这种当一个对象发生改变时去通知另一个对象的场景。建议你使用delegate 或notification 来处理。
      

  7.   

    我也遇到这个问题,谢谢9楼的提醒,让我我突然想到之前在C#上跨线程调用控件也是有同样的问题,其实都是同样的问题,如下操作:

    [self.tableView1 reloadData];
    改成:
    dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView1 reloadData];
    });
      

  8.   

     if (flag == YES)不建议这么写
    最好改成 if (flag) ...
      

  9.   

    我是在网络请求后执行的,reloadData后数据有了,界面没变化,跟楼主差不多,这个方法可以,谢谢
      

  10.   

    那使用collectionview reloadData数据更新,为什么数据无法显示出来
      

  11.   

    请求数据不是用的子线程么?那么数据还没有回来的时候 ,就执行了下面reloadData这句代码  等数据回来的时候没刷新列表,当然不显示数据了dispatch_async(dispatch_get_main_queue(), ^{[self.tableView1 reloadData];});正解!
      

  12.   

    这个我等下试试,但是我是用的临时数据直接copy的现有数据源进行刷新tableView的 ,不存在这种问题才对。已经打印过数据源大小,确认是copy过来了,但是reloadData过后没有走代理方法,不是在子线程里刷新的