2017-12-31 45 views
0

私は迅速であり、コアデータについて知りました。現在取り組んでいるプロジェクトに実装しようとしています。CoreDataのエンティティと属性

以前、私は2つのエンティティを作成しようとした親子関係を作成した構造体で

struct Course : Decodable { 
let CourseName : String; 
let Requirements : String; 
} 

struct AllCourses : Decodable { 
let ProgramName : String 
let Courses : [Course] 
} 

を取っています、私ができる私はそれらを保存するために管理が、私はセクションヘッダとテーブルビューをしていたとき、ネストされた配列がなかったからではありません。

プログラム名のセクションを作成したい場合、私の属性とエンティティはどのようになりますか?

+0

次のスレッドを確認してくださいhttps://stackoverflow.com/questions/47990426/how-to-deleterowrow-in-table-view-core-data-swift-3/48018009#48018009 –

+0

次のスレッドを確認してくださいhttps ://stackoverflow.com/questions/47990426/how-to-delete-row-in-table-view-core-data-swift-3/48018009#48018009 –

答えて

2

これはUITableViewControllerと組み合わせてNSFetchResultsControllerを使用する絶好の機会です。お使いのモデルがこのような何かがあると仮定すると、

:あなたのコードよりも

Core Data Entity Model

は次のようになります。

import UIKit 
import CoreData 

class ViewController: UITableViewController { 

    lazy var fetchedResultsController: NSFetchedResultsController<Course> = { 
     let fetchRequest = NSFetchRequest<Course>(entityName: "Course") 
     fetchRequest.sortDescriptors = [NSSortDescriptor(key: "program.name", ascending: true)] 

     let moc = *your context* 

     let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: moc, sectionNameKeyPath: "program.name", cacheName: nil) 
     // controller.delegate = self 

     return controller 
    }() 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     guard let sections = self.fetchedResultsController.sections else { 
      return 0 
     } 

     return sections.count 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     guard let sections = self.fetchedResultsController.sections else { 
      return 0 
     } 

     return sections[section].numberOfObjects 
    } 

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     guard let sections = self.fetchedResultsController.sections else { 
      return "" 
     } 

     return sections[section].indexTitle 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "CourseCell") as! UITableViewCell 
     cell.course = self.fetchedResultsController.object(at: indexPath) 
     return cell 
    } 
} 

あなたがフェッチ結果コントローラにsectionNameKeyPathを提供する場合、それは自動的になります "結果を「グループ化」します。コントローラー上の述部を使用して結果をさらに制限することができます。

+0

素晴らしい!やってみます!ありがとうございました!! – Mau

関連する問題