標籤:
所有列表式的資料都是用 TableView 顯示的
預覽
待補充
原料
- NSFetchedResultsController
用來操作 NSFetchRequst,有執行查詢,監聽變化,資料緩衝等功能
- NSFetchRequest
用來指定用什麼條件查哪個表,結果集怎麼排序
- NSSortDescriptor
排序方式 必須
- NSPredicate
謂語,其實就是查詢條件,可選
- UITableView
- UITableViewController
- UITableVIew 必須指定 DataSource,只要沒特殊要求直接用這個 ViewController 就好了,這個類同時聲明了下面兩個協議
- UITableViewDataSource
顧名思義這個協議要實現資料來源相關特性
- UITableViewDelegate
負責 TableView 的表現和動作的協議
步驟
- Storyboard 裡拖一個 Table View Controller,這個 Table View Controller 內建一個 TableView 還有一個 TableViewCell
- 定義一個 UITableViewController 的子類,在 Storyboard 裡把剛才那個 Table View Controller 的 Class 設為這個子類
- 聲明一個 NSFetchedResultsController 私人變數,在 viewDidLoad 裡初始化。
- 重寫兩個方法
- numberOfRowsInSection 返回指定分組的行數,NSFetchedResultsController 知道答案
- cellForRowAtIndexPath 通過 NSFetchedResultsController 擷取到資料後設定儲存格的顯示值,然後再返回這個儲存格
- 可以煙霧測試 (Smoke Test)一下了
程式碼片段
只有 cellForRowAtIndexPath 的常規寫法有些特別,這裡只貼出它的例子
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
-> UITableViewCell {
var cellId = "cellId" //屬性編輯器裡 給 TableViewCell 設定的 Identifier
var cell = tableView.dequeueReusableCellWithIdentifier(cellId) as UITableViewCell?
if cell == nil{
cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellId)
}
cell!.textLabel?.text="取出的值"
return cell!
}
連結
- TableView 編程指南
- Core Data 編程指南
- UITableViewDataSource 協議參考
- UITableViewDelegate 協議參考
iOS 開發快速導引:TableView 和 CoreData【草】