2017-12-31 11 views
0

저는 신속하고 핵심 데이터에 대해 배웠고 현재 작업중인 프로젝트에서이 데이터를 구현하려고합니다. CoreData 엔티티 및 속성

은 이전에 내가 두 엔티티를 만들려고

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

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

구조체에 복용하고 부모 - 자식 관계를 생성하고, 내가 그들을 저장 관리,하지만 난 섹션 헤더와의 tableview을 수행 할 때 내가 할 수 그 중첩 된 배열이 없기 때문이 아닙니다.

프로그램 이름이있는 섹션을 갖고 싶다면 내 속성과 엔티티는 어떻게됩니까?

+0

다음이 스레드를 확인하십시오 https://stackoverflow.com/questions/47990426/how-to-deleterow-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을 사용할 수있는 완벽한 기회입니다. '당신이 가져온 결과 컨트롤러에 sectionNameKeyPath를 제공 할 때

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 
    } 
} 

가 자동으로됩니다

Core Data Entity Model

코드보다 같을 것이다 : 모델을 가정

같은 것을 가지고 그룹화 '합니다. 컨트롤러에서 술어를 사용하여 결과를 더 제한 할 수 있습니다.

+0

위대한! 나는 그것을 밖으로 시도 할 것이다! 고맙습니다!! – Mau