2016-04-10 6 views
0

アプリケーションには2つのViewControllerがあります。最初のものはWebViewとナビゲーションバーが上にあり、もう1つは訪問された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.)TableViewが空の理由

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() 

    } 
} 
+1

クラス外でテーブルビューのデータソースとして使用される変数を宣言しないでください! – vadian

答えて

1

enter image description here CURRENTURLがnilでないか確認してください。空のcurrentURLのため、テーブルビューは空です。 webviewの読み込みが完全に終了した後、NSuserdefaultにURLを保存することをお勧めします。これがあなたを助けることを願っています。

+0

私はcurrentURLを印刷するためのコードを追加し、何も表示されずに実行されます。私は "保存"をクリックする前にしばらく待って、まだ動作しませんでした。 WebViewにはスクリーンショットとしてurlを表示するウィンドウがありません。ユーザーが新しいウェブサイトに直接入ることができるようにそのウィンドウを追加する方法?ありがとう。 – Mike

+0

添付のスクリーンショットはウィンドウではありません。これは、currentURLがロードされたテーブルビューです。 –

0

は、私はあなたがこの機能を追加すべきだと思う:

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

そして1つのinstadをsavingTableView.reloadData()

と呼んでください。また、いくつかの点で変数の値を表示してコードをデバッグしてください。たとえば、NSUserDefaultsから読み取った新しいデータとsavedURLsの値をviewDidAppearにします。

それはあなたが右のセル識別子を使用していることを確認してください動作しない場合:

let cell = tableView.dequeueReusableCellWithIdentifier("SavingCell") 
+0

ありがとうございます。私はあなたが示唆したすべてを試みましたが、何も表示されませんだから私は、currentURLを印刷するコードを追加し、何も表示されず、コンソールで発生します。私はcurrentURLを取得していないと思う。あなたはこれを解決するのを助けることができますか?ちなみに、私もsavedURLs.countを印刷しました。これは0で5回印刷されました。 – Mike

+0

@Mike私たちがテストできるようにプロジェクトをアップロードできますか? – ntoonio

+0

私のコードnumberofsctionsは1です。 – Mike

-1

私はあなたの問題がcellForRow機能であると思います。この機能を変更します。

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

var cell = tableView.dequeueReusableCellWithIdentifier("SavingCell") 
if cell == nil { 
    cell = UITableViewCell() 
} 
cell!.textLabel?.text = savedURLs[indexPath.row] 

return cell! 

} 
0

NSUserDefaultsを使用するのではなく、送信ボタンをクリックすると、データを次のView Controllerに渡してみます。 訪問したURLを追加して配列を維持し、送信をクリックすると次のView Controllerに渡します。

関連する問題