2012-12-14 8 views
0

코어 데이터 프로젝트에서 작업하고 있습니다. modification_date 필드가있는 테이블이 있습니다. 일의 모든 항목을 추출해야합니다. 1PM에서 9PM 사이의 modification_date.날짜 및 시간 범위 코어 데이터로 검색

는 는 이미 지난 N일에서만 항목을 추출하는 솔루션의 일부를 정리 한

등의 제안 : 지금 Core Data- predicate with dates

NSDate *today = [NSDate date]; 
NSDate *end_day = [today addTimeInterval: (days*86400.0f)]; 
day_st = [NSString stringWithFormat: @"(timestamp >= %@) AND (timestamp <= %@) AND ", today, end_day]; 

내 유일한 문제, 필터에 의해 추가 될 것이다 시간 범위. 그러나 결과에서 모든 단일 요소의 시간을 확인하기 위해 foreach를 만드는 경우를 제외하고는 나는 영리하지 못합니다.

답변

1

데이터 모델에 날짜 유형 필드를 저장하는 경우이를 수행 할 수있는 방법이 없습니다. 그것들은 참조 날짜 이후 초 단위로 저장되기 때문에 같은 일이기 때문에 NSDate에서 필터링하는 것이 효과적입니다. 그러나 데이터 저장소가 그러한 것에 대해 알지 못하기 때문에 날짜 구성 요소 (예 : 하루 중 시간)를 기반으로하는 조건부를 작성할 수는 없습니다. 데이터 저장소에서 결과를 가져온 후 결과를 필터링하는 것은 대부분의 경우 합리적인 방법입니다.

많은 일을하는 경우 하나 이상의 새로운 속성 (예 : 시간을 저장하는 정수 필드)을 추가하는 것이 좋습니다. 그런 다음 해당 필드를 NSPredicate에 포함시킬 수 있습니다. 날짜 필드가 변경 될 때마다이 필드의 값을 설정하십시오. 그리고 해당 필드가 어떤 시간대인지 알고 계신지. UTC가 바람직합니다. 현지 시간에 문제가 발생했습니다. UTC를 사용하면 "1PM", "9PM"등을 UTC로 변환하여 필드의 값을 설정하고 페치하기 전에 값을 변환 할 수 있습니다.

마지막으로 (당신이 알고 있을지 모르겠지만 질문에서 분명하지 않음), NSString이있는 동안 링크 한 다른 질문은 NSPredicate입니다.

적절한 코코아 날짜 객체를 공식화 줄 방법의 측면에서
((timestamp >= <startTimeOnDayOne>) AND (timestamp <= <endTimeOnDayOne>)) OR 
((timestamp >= <startTimeOnDayTwo>) AND (timestamp <= <endTimeOnDayTwo>)) OR 
[...] 

, 당신은 아마 두 NSDateComponents 종자 싶어 :

1

난 당신이 같은 조건으로 끝낼 방법을 찾고 말하고 싶지만 하나는 시작 시간이고 다른 하나는 종료 시간이며, 세 번째는 단순히 '하루'라고 말합니다. 그런 다음 NSCalendar (막연한 경우 현재 캘린더 만 사용) 및 dateFromComponents:dateByAddingComponents:toDate:options: 메쏘드를 사용하십시오. 전자는 첫날 날짜를 얻고 후자는 하루에 한 번씩 씩 진행합니다.

각 접합점에 24 시간을 추가하려고하면 일광 절약 시간으로 어느 지역에서든 연 2 회 잘못된 결과를 얻게됩니다.

당신은 배열로 각 관련 일에 대한 NSPredicate의를 구축 한 다음 런타임에 N일 얼마나 많은 걱정 할 수 있도록, 마지막에 하나의 조건에 모두 함께 접착제에 NSCompoundPredicate +orPredicateWithSubpredicates:를 사용할 수 있습니다.