2015-02-12 14 views
9

Tôi đang viết lại một hướng dẫn chuyển đổi mã từ Objective-C sang nhanh chóng. Ứng dụng di chuyển từ VC một nơi có 3 thanh trượt (đỏ, xanh lá cây và xanh dương) thiết lập màu nền, nhãn của tên màu và nút liên kết đến VC thứ hai. Trong VC thứ hai, màu từ VC đầu tiên được sử dụng làm nền và người dùng có cơ hội đặt tên cho màu.Chuyển biến trở lại cho phụ huynh trong Swift

Khi người dùng nhập tên màu, nó sẽ trả về tên màu mới cho VC gốc và nhãn hiển thị tên màu sẽ hiển thị văn bản đã nhập.

Sau đây là đoạn code đó gây ra vấn đề:

func textFieldShouldReturn(nameEntry: UITextField) -> Bool 
{ 
    ViewController().colourLabel.text = nameEntry.text 
    nameEntry.resignFirstResponder() 
    dismissViewControllerAnimated(true, completion: nil) 
    return true 
} 

Các lỗi "gây tử vong lỗi: bất ngờ tìm thấy con số không trong khi unwrapping một giá trị bắt buộc" được tạo ra. Tuy nhiên, việc gỡ lỗi nameEntry.text có một chuỗi trong đó.

Tôi hơi bối rối. Tôi có thể thử và làm một chuẩn bị cho thư giãn segue nhưng nó có nghĩa là một ứng dụng hướng dẫn.

Cheers

Trả lời

15

ViewController() thực sự tạo ra một thể hiện mới của ViewController của bạn. Đây không phải là tham chiếu đến số ViewController hiện có. Những gì bạn có thể làm là tạo ra một biến yếu trỏ đến ViewController đầu tiên bên trong ViewController thứ hai và thiết lập nó tại prepareForSegue hoặc khi bộ điều khiển View thứ hai được hiển thị.

class SecondViewController : UIViewController { 
    weak var firstViewController : ViewController? 

    // Other code 

    func textFieldShouldReturn(nameEntry: UITextField) -> Bool 
    { 
     firstViewController?.colourLabel.text = nameEntry.text 
     nameEntry.resignFirstResponder() 
     dismissViewControllerAnimated(true, completion: nil) 
     return true 
    } 
} 

Bên Đầu View Controller prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "SecondViewController" { 

     let secondViewController = segue.destinationViewController as SecondViewController 
     secondViewController.firstViewController = self 
    } 
} 
0

Có thể là bộ điều khiển xem trả về bởi ViewController() vẫn chưa nạp quan điểm của mình. Bạn có thể thử kiểm tra điều này trong một hàm setter và lưu trữ nó để sử dụng sau này khi các khung nhìn đã được tải.

class VC : UIViewController { 
    @IBOutlet weak var colourLabel: UILabel! 
    var savedLabelText: String? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.colourLabel.text = self.savedLabelText 
    } 

    func setColorLabelText(label: String) { 
     if self.isViewLoaded() { 
      self.colourLabel.text = label 
     } 
     else { 
      self.savedLabelText = label 
     } 
    } 
} 
Các vấn đề liên quan