2016-08-17 11 views
-1

私は現在、ユーザーがお気に入りの場所をテーブルビューに保存し、そのテーブルビュー内の行を選択すると、Webビューで新しいビューコントローラを開きます。そのWebビューでは、ユーザーがテーブルに追加した場所のGoogle検索を表示する必要があります。グローバル変数にNSURLを保存する

NSUserDefaultsを使用してGoogle検索のURLを保存しようとしましたが、別のView Controllerファイルからアクセスできませんでした。

私はGoogleで研究していますが、私が探しているものをまだ正確に見つけることができませんでした。

URLを保存して別のファイルからアクセスして、Webビューが表示するURLにアクセスする方法を知っている人がいるかどうかを知りたいと思っていました。

ここに私のコードだ: SecondViewController(ユーザーが保存した場所の名前を持つテーブルのビューがあり、選択は、ユーザーが保存した場所の名前のGoogle検索でビューを開く必要があります)

import UIKit 
var favoritePlaces = [String]() 

class SecondViewController: UIViewController, UITableViewDelegate, UITextFieldDelegate, UITableViewDataSource { 



    @IBAction func alertButtonPressed(sender: AnyObject) { 


      let addNewPlaceAlert = UIAlertController(title: "Add A Favorite Place", message: "Enter the name of the place here", preferredStyle: .Alert) 
     let saveAction = UIAlertAction(title: "Done", style: .Default) { (alert: UIAlertAction!) -> Void in 
      NSLog("You pressed button OK") 
      addNewPlaceAlert.dismissViewControllerAnimated(true, completion: nil) 
      let textField = addNewPlaceAlert.textFields![0] as UITextField 
      favoritePlaces.append(textField.text!) 
      self.favoritePlacesTable.reloadData() 
      NSUserDefaults.standardUserDefaults().setObject(favoritePlaces, forKey: "favoritePlaces") 
     } 
     let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (alert: UIAlertAction!) -> Void in 
      NSLog("You pressed button OK") 


     } 

    addNewPlaceAlert.addAction(saveAction) 
     addNewPlaceAlert.addAction(cancelAction) 
     addNewPlaceAlert.addTextFieldWithConfigurationHandler { (textField: UITextField!) in 

        } 

     presentViewController(addNewPlaceAlert, animated: true, completion: nil) 




    } 
    func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) { 
     if buttonIndex == 1 { 
      favoritePlaces.append(alertView.textFieldAtIndex(0)!.text!) 
      favoritePlacesTable.reloadData() 
     } 
    } 


    @IBOutlet var favoritePlacesTable: UITableView! 

     override func viewDidLoad() { 

     super.viewDidLoad() 

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

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


     } 
     // Do any additional setup after loading the view, typically from a nib. 
    } 
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

     favoritePlacesTable.deselectRowAtIndexPath(indexPath, animated: true) 

     let row = indexPath.row 
     print("Row: \(row)") 

     print(favoritePlaces[row] as String) 

    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section:Int) -> Int { 

     return favoritePlaces.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     var cell:UITableViewCell? = favoritePlacesTable.dequeueReusableCellWithIdentifier("Cell")! as UITableViewCell 
     cell!.textLabel?.text = favoritePlaces[indexPath.row] 

     if (cell != nil) 
     { 
      cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, 
            reuseIdentifier: "Cell") 
     } 

     // At this point, we definitely have a cell -- either dequeued or newly created, 
     // so let's force unwrap the optional into a UITableViewCell 


     return cell! 
    } 
    func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
     let row = indexPath.row 
     performSegueWithIdentifier("showContent", sender: row) 
    } 


    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
     if editingStyle == UITableViewCellEditingStyle.Delete { 

      favoritePlaces.removeAtIndex(indexPath.row) 

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

      favoritePlacesTable.reloadData() 
     } 
    } 







    override func viewDidAppear(animated: Bool) { 

     favoritePlacesTable.reloadData() 

      } 



} 

    Favorite Place View Controller(The view that opens once a user selects a row) 
import UIKit 

class FavoritePlaceViewController: UIViewController { 

    enter code here 
    @IBOutlet var favoritePlaceWV: UIWebView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 

let url = NSURL(string: "https://www.google.com")! 
     favoritePlaceWV.loadRequest(NSURLRequest(URL: url)) 
     // Do any additional setup after loading the view. 

     NSUserDefaults.standardUserDefaults().objectForKey("secondUrl") 
    } 

    `enter code here`override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 
+0

私達にあなたのコードを表示してください。 –

+1

ビューコントローラ間でデータを渡すために、 'NSUserDefaults'や大域変数(オーバーキル)を使う必要はありません。ちょうど 'prepareForSegue'のデータを渡してください – vadian

+0

@vadianあなたはこれ以上説明してください。 –

答えて

0

構造体を使用して、次のように異なるエンドポイントのベースURLを定義しました。私の必要に応じて、これはすべてのモデルとビューコントローラにもアクセス可能です。私はこれがあなたの必要条件だったと思います。

struct URL { 
private static let BaseURL = "https://yourdomain.com/urlendpoint/api/" 
private static let CurrentVersion = "v202/json/en/" 
private static let year15 = "2015/" 
private static let currentYear = "2016/" 

//MARK:- Update URl 
static var UpdateURL: String { 
    return BaseURL + CurrentVersion + currentYear + "update.json" 
} 

static var FirstURL: [String] { 
    var urls: [String] = [] 
    for i in 0...11 { 
     urls.append(BaseURL + CurrentVersion + currentYear + + FirstMonth + String(i) + ".json") 
    } 
    return urls 
} 


static var SecondURL: String { 
    return BaseURL + CurrentVersion + "second.json" 
} 

//MARK:- Dream 
static var ThirdURL: String { 
    return BaseURL + CurrentVersion + "third_results.json" 
} 

static var FourthURL: String { 
    return BaseURL + CurrentVersion + "fourth.json" 
} 

static var FifthURL: String { 
    return BaseURL + CurrentVersion + currentYear + "fifth.json" 
} 

}

+0

あなたの構造体に 'URL'という名前を付けるべきではありません。これはSwift 3の 'Foundation'で定義されている型です。https://developer.apple.com/reference/foundation/url – FelixSFD

+0

私は自分のコードで上記の私の答えを更新しました。私は、セルに字幕を追加し、字幕のテキストをGoogle検索のURLに変更できると考えています。次に、それをグローバル変数として保存して、SecondViewControllerとFavorite Places View Controllerで使用できるようにします。 –

関連する問題