2014-09-01 3 views
0

pickerDate가 있습니다. 회전하는 동안 날짜를 저장하려고하면 내 앱이 다운됩니다. 그러나 회전 피커를 멈출 때까지 기다리면 올바르게 저장됩니다.PickerDate가 Swift에서 회전 중이거나 정지 중인지 확인하는 방법은 무엇입니까?

내 pickerDate가 멈추거나 돌아가려면 저장하거나 충돌하지 않도록 확인해야합니다. 아니면 이걸 그만 해 .. 어떻게 이럴 수 있지?

datePicker.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged) 


    @IBOutlet weak var datePicker: UIDatePicker! 
var date = "" 
var age: NSDate! 

func handleDatePicker(sender: UIDatePicker) { 
    var dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "dd MMM yyyy" 
    age=sender.date 
    date = dateFormatter.stringFromDate(sender.date) 
} 

func calculateAge (birthday: NSDate) -> NSInteger { 

    var calendar : NSCalendar = NSCalendar.currentCalendar() 
    var now: NSDate = NSDate() 
    var dateComponentNow : NSDateComponents = calendar.components(NSCalendarUnit.CalendarUnitYear, fromDate: birthday, toDate: now, options: nil) 

    return dateComponentNow.year 
} 
@IBAction func okButton(sender: UIBarButtonItem) { 
    //code to calculate age and save this 
    var ageCalc = calculateAge(age) //Here crash 

고마워요!

+2

처럼 nil를 확인하기 위해 if let 구문을 사용 에). – dasblinkenlight

+0

언제 값을 읽습니까? 오류 메시지가 무엇입니까? 가치를 읽으려면 무엇을 사용하십니까? 독서를 유발하는 요인은 무엇입니까? 'UIControlEventValueChanged'를 사용합니까? – Larme

+0

내 코드를 추가했습니다. 예, UIControlEvents.ValueChanged를 사용합니다. – user3745888

답변

0

(birthday: NSDate)이 사용 가능한지 여부를 확인해야합니다. 그러므로 nil을 확인하십시오.

func calculateAge (birthday: NSDate) -> NSInteger { 

    if (birthday != nil) { 
     var calendar : NSCalendar = NSCalendar.currentCalendar() 
     var now: NSDate = NSDate() 
     var dateComponentNow : NSDateComponents = calendar.components(NSCalendarUnit.CalendarUnitYear, fromDate: birthday, toDate: now, options: nil) 
     return dateComponentNow.year 
    } 

    return -1; 
} 

그냥 nil 날짜를 확인하고 그래서 만약 -1 또는 NSIntegerMax가 아직 오른쪽 나이를 계산하지 않은 트랙에 계속 돌아갑니다.

업데이트 :if (birthday != nil) 또는 함수가 그 코드 무엇에 코드를 트리거 무엇을 어떤 맥락 (과 함께, 충돌 코드를 보여, 그래서하시기 바랍니다

func calculateAge (birthday: NSDate!) -> NSInteger { 

    if let thisBirthday = birthday { 
     var calendar : NSCalendar = NSCalendar.currentCalendar() 
     var now: NSDate = NSDate() 
     var dateComponentNow : NSDateComponents = calendar.components(NSCalendarUnit.CalendarUnitYear, fromDate: thisBirthday, toDate: now, options: nil) 
     return dateComponentNow.year 
    } 

    return -1; 
} 
+0

베타 6을 사용하고 있습니까? birthday {가 'BooleanType'을 준수하지 않는 경우. (birthday : NSDate!)가 정확하다. 시도해 보자. – user3745888

+0

@ user3745888 Swift에서 편리한 방법을 사용하여 날짜를 확인해야한다. 업데이트 됨 – Goppinath

관련 문제