2016-08-07 6 views
1

내 앱에서 UIDatePicker을 사용하여 날짜가없고 시간을 선택하고 그 값을 CoreData에 저장합니다. 그러나 내 코드에 datePicked.date (datePickedUIDatePicker 인 경우)을 사용하면 날짜 값도 저장됩니다. NSDateFormatterHH:mm a 형식으로 저장할 수는 있지만 데이터 모델에는 문자열을 저장하고 싶지 않습니다. dateFromString 시간을 필수 형식으로 저장하는 기능을 저장하더라도 기본 날짜가 시간과 함께 추가됩니다. 날짜없이 시간 만 저장하는 방법을 알려주십시오. 어떤 도움을 주시면 감사하겠습니다.Swift에서 UIDatePicker를 사용하여 날짜 구성 요소없이 CoreData에 시간 만 저장하는 방법?

+0

NSDate로 저장하고이를 검색하려면 "HH : mm a"형식의 NSDateFormater를 사용하여 timeString을 가져옵니다. 또한 NSDateCoponents를 사용하여 NSDate 객체에서 시간, 분 등을 분리 할 수 ​​있습니다. –

+0

당신은 date 객체 대신 timeIntervalSince1970을 저장할 수 있습니까? 그렇지 않으면 시간 간격도 절약하고 싶지 않은 것입니까? –

+0

날짜 부분을 항상 고정 값 (예 : 2000-01-01)으로 설정하면 정렬이나 비교를 망칠 염려가 없습니다. – zisoft

답변

1

업데이트 됨
변환 가능한 값을 핵심 데이터에 저장할 수 있습니다. 이 클래스와 마찬가지로 : enter image description here 을 그리고 당신은 모델 파일이 얻을 것이다 :

class Time: NSValueTransformer { 
let hour: Int 
let minute: Int 
let second: Int 

override init() { // only sample code 
    hour = 0 
    minute = 0 
    second = 0 
} 

override class func transformedValueClass() -> AnyClass { 
    return NSNumber.self 
} 

override func reverseTransformedValue(value: AnyObject?) -> AnyObject? { 
    guard let number = value as? NSNumber else { 
     return nil 
    } 
    return Time() // you should init Time from the number 
} 

override func transformedValue(value: AnyObject?) -> AnyObject? { 
    let number = hour * 60 * 60 + minute * 60 + second 
    return number 
} 

override class func allowsReverseTransformation() -> Bool { 
    return true 
} 
} 

은이 같은 변형 가능한 속성을 추가해야합니다

extension Entity { 

    @NSManaged var time: Time? // modify it to Time manually 

} 

을 그리고 지금, 당신은 관리 객체에 Time을 절약 할 수 있습니다.

+0

CoreData 모델에서 이러한 값을 단일 시간 값으로 저장할 수있는 방법을 알려주십시오. –

+0

@RajaRupinderSingh 내 대답이 업데이트되었습니다. – Lumialxk

+0

나는 당신의 접근 방식을 볼 수 있기 때문에 데이터 모델에 저장되기 전에 시간이 초 단위로 변환되고있다. 그러나 시간을 기준으로 지역 알림을 실행해야합니다. 따라서 알림을 올바르게 실행하려면 Am/Pm 매개 변수가 필요합니다. Am/Pm 값을 시간에 저장할 수 있습니까? 아니면 문자열로 저장 한 다음 문자열의 저장된 값과 비교해야합니까? –

관련 문제