2016-07-08 2 views
1

핵심 데이터의 이벤트를 필터링하고 달력에서 선택한 날짜와 동일한 날짜 특성을 가진 이벤트 만 인쇄하는 코드를 작성했습니다. 코드 : Heres the 코드 :필터링 된 배열의 tableView에 데이터 표시

이것은 작동하며 원하는대로 데이터를 필터링하고 원하는 이벤트 만 인쇄합니다. 문제는이 데이터를 tableView에 표시하는 방법을 모른다는 것입니다. 보통 나는 ... cellForRowAtIndexPath에서이 같이있는 tableView에

let ePast = eventsPast[indexPath.row] 
let cellPast = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomCell 

// Sets labels in cell to whatever user typed in on the events page 
cellPast.titlePrototypeCell!.text = ePast.eventPastTitle! 
cellPast.datePrototypeCell!.text = "Date: " + ePast.eventPastDateLabel! 

return cellPast 

을 코어 데이터의 모든 데이터를 표시 할 수 있습니다 ...하지만 난 내가 위에서처럼 배열로 새로운 데이터에 액세스하는 방법을 잘 모르겠습니다. 어떤 아이디어?

+0

이것은 빠름! 'NSArray'와'NSPredicate'에 연결하는 것보다는'filter'와 같은 Swift의 네이티브 함수를 사용하십시오. 필터 연산의 결과를 데이터 소스 배열에 할당하면됩니다. – vadian

+0

기회가 있다면 어떨까요? 나는 모든 것을 조사해 왔으며 이것은 Core Data와 함께 작동하는 유일한 방법입니다. –

+0

핵심 데이터에서 필터링 된 데이터를 가져 오는 가장 좋은 방법은 가져 오기 요청에 할당 된 조건 자입니다. 여기에는 수천 가지의 예제가 있으며 코어 데이터 문서의 샘플 코드도 있습니다. – vadian

답변

1

클래스에 두 번째 배열이 있습니다. 필터가 없으면 두 배열이 동일합니다. 필터가 있으면, 절대적으로 모든 것을 가진 마스터 배열을 가지며, 필터링 된 배열은 작은 부분 집합입니다. 당신의 tableview 방법에서 다음

(class var) myFilteredArray = (eventsPast as NSArray).filteredArrayUsingPredicate(predicate) 

:

let ePast = myFilteredArray[indexPath.row] 

그리고 필터링 된 배열 개수가 아닌 마스터 배열 수에 테이블 행 크기를 설정해야합니다. 그렇지 않으면 경계선을 벗어날 것입니다.

+0

오류가 발생합니다 : 'AnyObject'유형의 값에 'eventPastTitle'멤버가 없습니다. –

+0

필터 기능이'AnyObject' 배열을 반환합니다. 당신이 알고있는 수업에 그것을 던지고 인생과 함께 나아가 야합니다. – Putz1103

관련 문제