2016-07-08 18 views
1

私は、コアデータからのイベントをフィルタリングし、カレンダーで選択された日付と等しい日付属性を持つイベントのみを出力するコードを記述しました。フィルタリングされた配列からテーブルビューにデータを表示

これは機能し、私が望む方法でデータをフィルタリングし、必要なイベントのみを出力します。問題は、このデータを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

コアデータからフィルタリングされたデータを取得する最適な方法は、フェッチ要求に割り当てられた述部です。それには、Core Dataドキュメンテーションのサンプルコードと同様に、ここに何千ものサンプルがあります。 – vadian

答えて

1

あなたのクラスには2番目の配列があります。フィルタがない場合、2つの配列は同じです。フィルタがある場合は、すべてのものを持つマスター配列があり、フィルタされた配列は小さなサブセットです。あなたのテーブルビューの方法で次に

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

let ePast = myFilteredArray[indexPath.row] 

そして、あなたのフィルタアレイの数ではなく、マスターアレイ数にテーブル行のサイズを設定してください。それ以外の場合は、境界外のクラッシュが発生します。

+0

エラーが発生しました:タイプ 'AnyObject'の値にメンバー 'eventPastTitle'がありません –

+0

フィルタ機能が 'AnyObject'の配列を返しています。あなたが知っているクラスにキャストし、人生で動いてください。 – Putz1103

関連する問題