UITableView重载数据可以在IOS 7上运行,但可以在IOS Simulator中使用

时间:2014-07-17 17:58:17

标签: ios uitableview xcode6

我的控制器类中有UITableView IBOutlet。它默认是隐藏的,但在文本字段编辑时,它会调用Google地方加载城市,与文本字段中输入的文本相匹配。

当文字发生变化时,我会从google places api获取结果,取消隐藏表格,然后调用表格重新加载数据方法。

self.cityAutocompleteList.hidden = false            
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
{
   self.cityAutocompleteList.reloadData()
})

numberOfRowsInSection正确显示行。但是cellForRowAtIndexPath没有被解雇。

在iOS模拟器iPhone5s上一切正常,但它在运行iOS 7.1的iPhone上无效。

编辑:

我也尝试在主队列中更新,如下所示,但仍无效。

dispatch_async(dispatch_get_main_queue(), 
{
    self.cityAutocompleteList.reloadData()
})

更新1: 事实上,即使表格没有隐藏起来,也没有显示。

更新2: 经过一些搜索后,我发现不建议在滚动视图中添加一个tableview,因此即使没有隐藏,tableView也不会显示。但我的问题是这个,我需要在文本字段上有类似行为的下拉菜单。所有文本字段都在滚动视图中,因为我在编辑时向上移动文本字段,以免被键盘隐藏。那我怎么能避免这个问题呢?

1 个答案:

答案 0 :(得分:3)

如果你想在主线程上发生某些事情,你需要这样做:

dispatch_sync(dispatch_get_main_queue(), ^{
  //Your code goes in here
  NSLog(@"Main Thread Code");       
});

在swift中使用以下内容:

        dispatch_sync(dispatch_get_main_queue(), {
            println("Main Thread Code")
            })

您的代码似乎正在将重新加载到后台线程,以确保表视图不会更新

在这种情况下,tableview位于scrollview内部,这是不正确的。