2016-09-23 6 views
7

이 코드는 Xcode 7에 datePicker을 사용하여 textField을 업데이트 할 수 있지만 Xcode 8 및 Swift 3에서 구현하려고하면 App이 충돌하고 AppDelegate.swift 파일에 SIGABRT 오류가 발생합니다. 모든 @IBs를 확인했는데 삭제해야 할 기타 연결이 없습니다. 모든 지침은 크게 감사하겠습니다.스위프트 3 | Xcode 8 datePicker 업데이트 UItextField

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 
    @IBOutlet var eventStartText: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     eventStartText.delegate = self 

     // Do any additional setup after loading the view. 
    } 

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

    // MARK: TextField Delegate 
    func datePickerChanged(sender: UIDatePicker) { 
     let formatter = DateFormatter() 
     formatter.dateStyle = .full 
     eventStartText.text = formatter.string(from: sender.date) 

     print("Try this at home") 
    } 

    func textFieldDidBeginEditing(_ textField: UITextField) { 
     let datePicker = UIDatePicker() 
     textField.inputView = datePicker 
     datePicker.addTarget(self, action: (Selector(("datePickerChanged:"))), for: .valueChanged) 

     print("This Worked") 
    } 

    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     eventStartText.resignFirstResponder() 
     return true 
    } 

    // MARK: Helper Methods 
    func closekeyboard() { 
     self.view.endEditing(true) 
    } 

    // MARK: Touch Events 
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     closekeyboard() 
    } 

    /* 
    // MARK: - Navigation 

    // In a storyboard-based application, you will often want to do a little preparation before navigation 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
    } 
    */ 
} 
+0

크래시 디버깅 방법은 http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1을 참조하십시오. 도움이 필요하면 충돌에 대한 더 자세한 내용으로 질문을 업데이트하십시오 (완전한 오류 메시지와 실제로 충돌을 일으키는 선을 지적하십시오). – rmaddy

답변

13

문제는 스위프트 3에서 당신은 selector 내부의 첫 번째 매개 변수의 이름을 지정하므로이처럼 selector 구문을 변경할 필요는 selector 구문입니다.

datePicker.addTarget(self, action: #selector(datePickerChanged(sender:)), for: .valueChanged) 
+0

당신은 록 스타입니다! 정말 고맙습니다. 이것은 트릭을했다. –

+0

환영 메이트 :) –