应用程序中有两个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.)
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()
}
}
答案 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来维护数组,然后在单击“发送”时将其传递给下一个视图控制器。