【问题标题】:NavigationController does not reload tableView data after popToRootViewController在 popToRootViewController 之后 NavigationController 不会重新加载 tableView 数据
【发布时间】:2014-09-01 14:33:14
【问题描述】:

对不起我的英语

在我的应用程序中,我有一个登录表单。如果用户名和密码正确, 用户名存储在 keyChain 中,然后返回到主 viewController 使用:self.navigationController.popToRootViewControllerAnimated(true)

数据由使用用户名从该用户名获取数据的 php 文件加载

在主视图控制器中,它们是一个包含数据的 tableView

但是问题是,连接后tableView没有变化。只有当我重新启动应用程序时它才会改变

我获取数据的代码:

@IBOutlet var tblTask: UITableView!

let bodyData = "username=" + username!

        let URL: NSURL = NSURL(string: "link to php file")
        let request:NSMutableURLRequest = NSMutableURLRequest(URL:URL)
        request.HTTPMethod = "POST"
        request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue())
        {
            (response, data, error) in
            var output = NSString(data: data, encoding: NSUTF8StringEncoding)

            var array = self.JSONParseArray(output)

            for var i = 0, a = 1 ; i < array.count ; i += 2, a += 2 {

                if(a > 0 && i > 0)
                {
                    self.arrayDate.append(array[i])
                    self.arrayPoid.append(array[a])
                }
            }
            for var i = 0; i < self.arrayDate.count ; i++ {
                self.arrayPoid[i] += " livres"
            }


            self.tblTask.reloadData()
        }

【问题讨论】:

  • 你使用 UITableViewController 吗?您是否正确绑定了tableView 插座?
  • 您的代码中缺少某些内容。你什么时候在你的(表)ViewController 中执行NSURLConnection.sendAsynchronousRequest...?用什么方法?
  • 所以,每次你需要重新加载你的tableView,在你的viewDidiLoad:之外,你实际上需要调用NSURLConnection.sendAsynchronousRequest...。这将重新获取您的数据源并在它之后执行您的 tableView 重新加载。你同意吗?

标签: ios uinavigationcontroller swift tableview


【解决方案1】:

我认为 Unwind Segues 是您所需要的。您只需几个步骤即可设置它们。在你的 rootViewController 中添加这个方法:

@IBAction func reset(segue: UIStoryboardSegue) {
    tableView.reloadData()
}

在 Interface Builder 中,在任何需要返回 rootViewController 的 viewController 中创建 UIButtons。然后将每个UIButtons 链接到各自 viewController 的红色“退出”按钮,然后在出现的弹出菜单中选择重置:(见下图)。

当您单击这些按钮时,您将返回到您的 rooViewController 并执行reset:(重新加载您的 tableView)。

请参阅 WWDC 2012 会议视频“在您的应用中采用 Storyboards”,了解有关展开转场的更多详细信息 [从 38 分钟开始]。

【讨论】:

  • 这样我还需要 navigationController.popToRootView 吗?因为它给了我一个错误
  • 不,我相信你不再需要navigationController.popToRootView。告诉我。
  • 不,你不需要它,但它仍然不会重新加载数据,但我知道它正在调用该函数,因为我在其中添加了一个 println
  • 好的。现在,您只需要找到一种方法来重新加载您的表格视图...检查您的数据源和委托。你如何管理你的 PHP 文件?这可能是问题所在。
  • 我使用 sendAsynchronousRequest 加载数据可能是问题所在?
【解决方案2】:

尝试在UITableViewControllerviewWillAppear 方法中调用self.tableView.reloadData()。解决了吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    相关资源
    最近更新 更多