Hacking with Swift 사이트의 강좌 번역본입니다.
How to create a Core Data fetch request using @FetchRequest
가져오기 요청으로 지정한 특정 기준과 일치하는 Core Data 결과를 불러올수 있고, SwiftUI는 이러한 결과와 사용자 인터페이스 요소에 직접 바인딩 할 수 있습니다.
Core Data와 SwiftUI 설정 지침을 따르는 경우, 관리 객체 컨텍스트는 이미 SwiftUI environment에 추가되어 있습니다.
그 단계가 필요합니다. Core Data 가져오기 요청을 실행하고 SwiftUI 목록 내부에 데이터를 보여주는 방법을 알고 싶어하지만, 위의 링크에 있는 단계를 따르지 않고 @FetchRequest를 사용하면 SwiftUI는 설정이 완료 될것이라 예상하기 때문에, 런타임 크래쉬가 날 것입니다.
관리 객체 컨텍스트가 .managedObjectContetxt 키로environment에 첨부되어 있으면, 뷰 안에 Core Data 가져오기 요청을 자동으로 만들고 관리하는 프로퍼티를 만들기 위해, @FetchRequest 프로퍼티 래퍼(wrapper)를 사용할 수 있습니다.
가져오기 요청을 만들기 위해서 2가지 정보가 필요합니다: 쿼리하고자 하는 엔티티(entity)와 결과가 반환되는 순서를 결정할 정렬 조건. 예제에서 이름(name)과 작성자 속성(creator attributes)을 가진 ProgrammingLanguages 엔티티를 만들었기에, 다음과 같이 가져오기 요청을 만들 수 있습니다.
@FetchRequest(entity: ProgrammingLanguage.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \ProgrammingLanguage.name, ascending: true)]) var languages: FetchedResults<ProgrammingLanguage>
이름을 알파벳 순으로 정렬된 모든 프로그래밍 언어를 불러옵니다.
보다시피, sortDescriptors 매개변수는 배열이므로, 다음과 같이 필요한만큼 많은 정렬 옵션을 제공할 수 있습니다.
@FetchRequest(entity: ProgrammingLanguage.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \ProgrammingLanguage.name, ascending: true), NSSortDescriptor(keyPath: \ProgrammingLanguage.creator, ascending: false)]) var languages: FetchedResults<ProgrammingLanguage>
네, 코드가 엄청나므로, 좀 더 읽기 쉽게 나누어도 비난하지 않을 것입니다.
@FetchRequest(
entity: ProgrammingLanguage.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \ProgrammingLanguage.name, ascending: true),
NSSortDescriptor(keyPath: \ProgrammingLanguage.creator, ascending: false)
]
) var languages: FetchedResults<ProgrammingLanguage>
가져오기 요청을 만드는 방법과 상관없이, 그 결과는 SwiftUI 뷰 내부에서 직접 사용될 수 있습니다. 예를들어, 다음과 같이 모든 언어의 목록을 보여줄 수 있습니다.
List(languages, id: \.self) { language in
Text(language.name ?? "Unknown")
}
'SwiftUI > Core Data' 카테고리의 다른 글
How to delete Core Data objects from SwiftUI views (0) | 2019.12.03 |
---|---|
How to add Core Data objects from SwiftUI views (0) | 2019.12.03 |
How to filter Core Data fetch requests using a predicate (0) | 2019.12.03 |
How to access a Core Data managed object context from a SwiftUI view (0) | 2019.12.03 |
How to configure Core Data to work with SwiftUI (0) | 2019.12.02 |
Introduction to using Core Data with SwiftUI (0) | 2019.12.02 |