为什么TableView是空的

时间:2016-04-10 11:12:31

标签: ios swift tableview

应用程序中有两个ViewControllers。第一个是顶部有WebView和导航栏,第二个是显示访问过的URL的TableView。请查看截图和代码。单击保存按钮以保存用户正在访问的当前URL后,TableView为空。我先测试了TableView,它设置得很好。请帮助找出问题所在。顺便说一句,var savedURLs = [String]( I didn't put the other half of bracket as it won't show correctly if I put it.)

WebView Controller

TableView Controller

import UIKit

class BrowserViewController: UIViewController {


  @IBOutlet weak var browser: UIWebView!


  @IBAction func saveButtonPressed(sender: AnyObject) {

    if let currentURL = browser.request?.URL?.absoluteString  {

        savedURLs.append(currentURL)

        NSUserDefaults.standardUserDefaults().setObject(savedURLs, forKey: "savedURLs")

    }

  }

   override func viewDidLoad() {
      super.viewDidLoad()

      let url = NSURL(string: "https://www.google.com")!

      let request = NSURLRequest(URL: url)

      browser.loadRequest(request)

  }

}
import UIKit

var savedURLs = [String](

class SavingViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

  @IBOutlet weak var savingTableView: UITableView!

  override func viewDidLoad() {
    super.viewDidLoad()

   savingTableView.delegate = self
    savingTableView.dataSource = self

    if NSUserDefaults.standardUserDefaults().objectForKey("savedURLs") != nil {

        savedURLs = NSUserDefaults.standardUserDefaults().objectForKey("savedURLs") as! [String]
    }

  }



  func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
  }


  func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return savedURLs.count
  }


  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

     let cell = tableView.dequeueReusableCellWithIdentifier("SavingCell")

    cell!.textLabel?.text = savedURLs[indexPath.row]

    return cell!

  }


  override func viewDidAppear(animated: Bool) {

    savingTableView.reloadData()

  }
}

2 个答案:

答案 0 :(得分:0)

我认为你应该添加这个功能:

func reloadTable() {
    if NSUserDefaults.standardUserDefaults().objectForKey("savedURLs") != nil {
        savedURLs = NSUserDefaults.standardUserDefaults().objectForKey("savedURLs") as! [String]
    }
    savingTableView.reloadData()
}

并调用savingTableView.reloadData()

的一个实例

还可以通过在某些点打印变量值来调试代码。例如,当您从NSUserDefaults读取时的新数据以及viewDidAppear中savedURL的值。

如果这不起作用,请确保您使用正确的小区标识符:

let cell = tableView.dequeueReusableCellWithIdentifier("SavingCell")

答案 1 :(得分:0)

单击“发送”按钮而不是使用NSUserDefaults时,尝试将数据传递到下一个视图控制器。 通过附加您访问的URL来维护数组,然后在单击“发送”时将其传递给下一个视图控制器。