2017-01-15 10 views
0

엔티티를 저장하고 "날짜"라는 속성을 부여했습니다. 내 목표는 특정 일 집합에 대한 개체를 가져 오는 것입니다. 날짜 (NSDate) 객체는 특정 순간에 발생하므로 가져 오려는 매일 "일 범위"를 만들어야합니다.CoreData 가져 오기 문제 : 특정 요일 배열로 엔티티 가져 오기

어떻게 효과적으로 접근 할 수 있습니까? N 일 동안 N 개의 술어를 작성하거나 "AND"절이있는 하나의 큰 술어를 작성해야합니까? 이 공통의 목표에 접근하는 영리한 방법이 있습니까?

+1

'NSCoumpoundPredicate'는 "date> = StartOfDay AND date> = endOfDay'로 원하는 요일마다 OR 술어를 만들고 OR로 그들을 합성해야합니다. – Larme

+0

실제로 화합물 술어를 사용하여 종료되었습니다. 감사. –

답변

1

데이터 (모든 이벤트)가 멀티플 타임이 필요한 경우, 모든 요청에 ​​대해 데이터를 가져와야하며 더 잘 필터링해야합니다. 당신이 날짜 범위

에 대한 특정 날짜

let calender = NSCalendar.currentCalendar() 
eventsForSelectedDay = events.filter({ return calender.isDate($0.yourDateProperty, inSameDayAsDate: self.currentSelectedDate) == true }) 

2. 그들에게

1. 필요 다음

var allEvents = [Events]() 

... 
let fetchRequest = NSFetchRequest(entityName: "events") 
allEvents = try context.executeFetchRequest(fetchRequest) as! [Event] 

을 그리고, :

예를 들어

eventsForSelectedDays = events.filter({ return $0.yourDateProperty >= dateFrom && $0.yourDateProperty < dateTo }) 
+0

그러면 모든 엔티티를 먼저 가져온 다음 특정 범위를 필터링하여 필요한 선택을 가져 오겠습니까? 좋았지 만, 내가 특정한 술어를 찾고 있었던 이유는 기억상의 이유로였다. 메모리에 가져와야하는 객체의 양에 대한 임계 값과 같은 것이 있습니까 (성능에 초점을 맞 춥니 다)? 그 외에는 좋은 대답입니다. –

+0

isDate (_ : inSameDayAsDate :) : 두 NSDate 인스턴스가 같은 요일 인 경우 true를 반환합니다. 날짜 구성 요소로 파기는 필요 없습니다. 귀하의 예제는 다음과 같습니다 :'let filtered = events.filter {calendar.isDate ($ 0.date, inSameDayAs : otherDate)}' –

+0

데이터베이스에서 몇 개의 이벤트를 가져 옵니까? – derdida