동적으로 생성된 값에 따라 구역 구분
개요
CoreData 내의 데이터를 가져올 때 기존 데이터를 이용하여 구역을 나누기를 원합니다.
하지만
sectionNameKeyPath
에 맡기기 위해 Attribute를 늘리는 것을 낭비하고 싶지 않다.CoreData 내의 데이터 양을 최대한 늘리지 않고 기존 데이터를 활용한 분류 방법을 소개합니다.
예제
정확한 시간 데이터에서 날짜만 추출합니다.
나는 그것을 이용한다
sectionNameKeyPath
.대략적인 절차는 두 가지가 있다.
xcdatamodeld
을 활성화합니다.터미널 정의
class Tweet: NSManagedObject {
@NSManaged var text: String?
@NSManaged var tweetId: String?
@NSManaged var createdAt: NSDate?
@objc var sectionDate: String {
let dateFormatter = DateFormatter()
dateFormatter.locale = NSLocale(localeIdentifier: "en_US") as Locale!
dateFormatter.dateFormat = "yyyy/MM/dd"
return dateFormatter.string(from: self.createdAt! as Date)
}
기탑을 정의할 때 @objc
가 필요합니다.@objc
가 없으면 섹션 수는 1입니다.Transient 옵션 사용
이렇게 준비하면 완성된다.
그리고
NSFetchedResultController
를 초기화할 때sectionNameKeyPath
로 sectionDate
에 건네주면 됩니다.자세한 설명
터미널 정의
createdAt
에는 연월 일시 분초의 정확한 시간 정보가 포함되어 있다.이러다
NSFetchedResultController
의sectionNameKeyPath
에게 맡겨도 분류가 너무 가늘어져 실용적이지 못하다.모델류에서 정의된
sectionDate
의 기탑은 그 중에서 createdAt
에서만 연월일의 정보를 추출한다.이로써 전달
sectionNameKeyPath
에 사용할 값을 얻을 수 있다.효과적인 Transient 활용
초기화
NSFetchedResultController
할 때sectionNameKeyPath
로 전달할 수 있도록 수정xcdatamodeld
.Transient
를 유효하게 함으로써 데이터가 지속되지 않습니다.이로써
sectionDate
데이터 양은 헛되이 증가하지 않는다.이 페이지에서 설명한 내용을 사용하여 이러한 TableView를 사용할 수 있습니다.
(이미지의 일부가 삭제됨)
참고 자료
https://stackoverflow.com/questions/44804683/nsfetchedresultscontroller-not-working-with-transient-properties
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/KeyConcepts.html
https://developer.apple.com/documentation/coredata/nsfetchedresultscontroller/1622282-init
Reference
이 문제에 관하여(동적으로 생성된 값에 따라 구역 구분), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/color_box/items/fe383fd0896318ed49ee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)