ios - Core Data Swift로 TableView 및 행 섹션화

기사 출처 ios uitableview swift nsfetchedresultscontroller sections

sqlite에 두 개의 테이블이 있습니다.

코드는 XCode 생성에 의해 생성되었습니다.

class Event: NSManagedObject {

    @NSManaged var startDate: NSDate
    @NSManaged var details: EventDetail  //i think this property shoud be var details Array<EventDetail>  am i correct?
}

class EventDetail: NSManagedObject {

    @NSManaged var title: String
    @NSManaged var location: String
    @NSManaged var note: String
    @NSManaged var endDate: NSDate
    @NSManaged var event: NSManagedObject
}


섹션에 이벤트를 넣고 행에 eventDetails를 넣고 싶습니다.

이벤트를로드하는 방법을 만들었습니다.

var eventList : Array<AnyObject> = []

func loadEvents(){
    let appDel : AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let moc: NSManagedObjectContext = appDel.managedObjectContext!
    let eventMO = NSFetchRequest(entityName: "Event")
    eventMO.returnsObjectsAsFaults = false

    var err : NSErrorPointer = nil
    eventList = moc.executeFetchRequest(eventMO, error: err)!
    self.tblEvento.reloadData()
}

func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
    return eventList.count
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {       
    //return (eventList[section] as Event).details.count
   return //????? what can i put here
}


섹션에있는 행 수를 정의하기 위해 numbertOfRowsInSection 메서드에 무엇을 넣을 수 있는지 모르겠습니다. details.count 또는 이와 비슷한 항목에 액세스 할 수 없기 때문입니다.

다른 방법이 있다고 생각합니다. NSFetchedResultsController를 사용했지만 성공하지 못한 것을 보았습니다.

나는 약간의 도움을 줄 것입니다.
힌트 : CoreData 및 UiTableView를 사용하는 경우 NSFetchedResultsController를 사용하여 작업을 훨씬 더 쉽게 만듭니다. 시작점 및 샘플 코드를 검색하는 경우 Xcode에서 새 마스터-디테일 애플리케이션 프로젝트를 만들고 대화 상자에서 "코어 데이터 사용"을 설정하면됩니다.

이제 NSFetchResultsController의 "구현"예제 : 질문으로 바로 넘어가겠습니다.

var fetchedResultsController : NSFetchedResultsController {

  if _fetchedResultsController != nil {
       return _fetchedResultsController!
   }
   let fetchRequest = NSFetchRequest()
   // Edit the entity name as appropriate.
   let entity = NSEntityDescription.entityForName("Event", inManagedObjectContext: self.managedObjectContext!)
   fetchRequest.entity = entity

   // Set the batch size to a suitable number.
   fetchRequest.fetchBatchSize = 20

   // Edit the sort key as appropriate.
   let sectionSortDescriptor = NSSortDescriptor(key: "startDate", ascending: true)
   let secondSortDescriptor = NSSortDescriptor(key: "title", ascending: true)

   let sortDescriptors = [sectionSortDescriptor, secondSortDescriptor]

   fetchRequest.sortDescriptors = sortDescriptors

   // Edit the section name key path and cache name if appropriate.
   // nil for section name key path means "no sections".
   let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: "startDate", cacheName: nil)
   aFetchedResultsController.delegate = self
   _fetchedResultsController = aFetchedResultsController

   var error: NSError? = nil
   if !_fetchedResultsController!.performFetch(&error) {
       // Replace this implementation with code to handle the error appropriately.
       // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
       //println("Unresolved error \(error), \(error.userInfo)")
       abort()
   }

   return _fetchedResultsController!
}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return self.fetchedResultsController.sections?.count ?? 0
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    let sectionInfo = self.fetchedResultsController.sections![section] as NSFetchedResultsSectionInfo
    return sectionInfo.numberOfObjects
}

이 질문에 대해 Stack Overflow에서 비슷한 토론을 찾았습니다: https://stackoverflow.com/questions/25852948/

관련 기사
ios - 신속하게 작업 결과에 따라보기 전환
ios - 신속한 iOS에서 텍스트 필드 UI 업데이트
ios - UIView.animateWithDuration 완료
ios - Swift에서 Core Data로부터받은 배열 정렬
ios - UIcollectionview에서 특정 셀에 대한 참조 가져 오기
ios - SWIFT-xcode 6 베타 6.의 KVO. observeValueForKeyPath가 더 이상 호출되지 않습니다.
ios - iOS8에서 VFR-Reader 충돌
ios - iOS 8 확장의 TBXML이 빌드되지 않음
ios - 사진을 찍고 카메라 롤에 저장
ios - iOS 사용자 정의 UITableViewCell 클래스 하위보기가 null을 반환합니다.