문제

NSUSERDEFAULTS에 NSDATE를 저장하는 두 가지 방법이 있습니다.

옵션 1 -setObject : forkey :

// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];

// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];

옵션 2 -TimeIntervalsince1970

// Set
NSDate *myDate = [NSDate date];
NSTimeInterval myDateTimeInterval = [myDate timeIntervalSince1970];
[[NSUserDefaults standardUserDefaults] setFloat:myDateTimeInterval forKey:@"myDateKey"];

// Get
NSTimeInterval myDateTimeInterval = [[NSUserDefaults standardUserDefaults] floatForKey:@"myDateKey"];
NSDate *myDate = [NSDate dateWithTimeIntervalSince1970:myDateTimeInterval];

장점과 단점

옵션 1

이것은 작고 논리적 인 것 같습니다. 그러나, 나는 이것에 대해 걱정하는 것에 대해 걱정했다. 날짜 포피터 버그.

옵션 2

이것은 서투른 것 같습니다. 또한 정확도가 확실하지 않습니다. 한 번의 테스트에서 NstimeInterval에 "하위 초점 정확도"가 있다고 Apple Docs에도 불구하고 날짜를 뒤로 검색했을 때 48 초가 걸렸습니다.

요구 사항

내가 선택한 방법은 다음과 같습니다.

  1. 1 초 이내에 정확합니다.

  2. 읽기 쉽고 신뢰할 수 있습니다.

내 질문

내가 뭔가 잘못하고 있기 때문에 옵션 2의 부정확성입니까?

이 두 가지 옵션 중 어느 것을 사용 하시겠습니까?

내가 모르는 또 다른 옵션이 있습니까?

감사!

도움이 되었습니까?

해결책

당신은 불필요하게 복잡한 것들을 복잡하게하고 있습니다. 날짜를 시간 간격으로 변환하는 이유 (그런 다음 시간 간격이 다른 원시로)? 단지 [sharedDefaults setObject:theDate forKey:@"theDateKey"] 그리고 그것으로 끝났습니다. NSDate는 PLIST 형식 (날짜, 숫자, 문자열, 데이터, 사전 및 배열)이 지원하는 "기본 유형"중 하나이므로 직접 저장할 수 있습니다.

보다 문서 증거를 위해.

날짜를 직접 저장하고 검색하여 올바른 일 (시간대, 정밀도 등)을보십시오. 다른 사람들이 말했듯이 형성자는 없습니다.

다른 팁

옵션 #1의 경우 날짜 Formatter가 관련되어 있다고 생각하지 않습니다. 아마도 후드 아래에 있지만, 나는 그것이 깨지지 않았다고 생각합니다. 날짜가 저장됩니다 ISO 8601 형태.

옵션 #2의 경우 사용하십시오 -setDouble:forKey: 그리고 -doubleForKey 대신 float-기반 버전. 이것이 정밀 오류의 원인 일 수 있습니다.

nsuserDefaults를 사용하십시오. 날짜는 줄루 시간에 저장되므로 걱정할 시간 영역 문제가 없습니다. 시간대에 보관하고 다른 시간대에서 꺼내면 괜찮을 것입니다. 시스템은 변환을 처리합니다 (걱정할 날짜 Formatter 없음).

Facebook 그래프 API에서 만료 날짜를 저장하는 경우 *옵션 2*.

옵션 2를 문자열로 쉽게 변환 할 수 있습니다 (StringWithFormat 사용). 가장 중요한 것은 그래프 API에서 작동합니다.

또한 날짜 형식에 대해 걱정할 필요가 없습니다. nsdateformatter를 다루지 않는 것은 48 초의 오류가 가능합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top