[swift] NSFetchRequest 사용하기

Core Data 를 사용하여 데이터를 관리하는 경우, 데이터베이스에서 원하는 데이터를 검색할 필요가 있을 수 있습니다. NSFetchRequest는 Core Data에서 데이터를 검색하기 위한 클래스입니다. 이번 포스트에서는 NSFetchRequest를 사용하는 방법에 대해 알아보겠습니다.

NSFetchRequest 생성하기

NSFetchRequest는 데이터를 검색하기 위한 요청(request)을 나타냅니다. 이를 생성하기 위해서는 먼저 해당 Entity에 대한 NSFetchRequest 인스턴스를 생성해야 합니다.

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "YourEntityName")

위의 예시 코드에서 YourEntityName은 검색하려는 Entity의 이름입니다.

결과 정렬하기

검색 결과를 정렬하는 경우, NSFetchRequest의 sortDescriptors 속성을 사용할 수 있습니다. 예를 들어, 이름으로 정렬하려는 경우 다음과 같이 설정할 수 있습니다.

let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]

위의 예시 코드에서는 name 속성을 오름차순으로 정렬하는 방법을 보여줍니다.

결과 제한하기

검색 결과를 제한하는 경우, NSFetchRequest의 fetchLimit 속성을 사용할 수 있습니다. 예를 들어, 최대 10개의 결과만 가져오고 싶은 경우 다음과 같이 설정할 수 있습니다.

fetchRequest.fetchLimit = 10

위의 예시 코드에서는 최대 10개의 결과만을 가져오도록 설정하였습니다.

필터링하기

검색 결과를 필터링하는 경우, NSFetchRequest의 predicate 속성을 사용할 수 있습니다. 예를 들어, 특정 조건을 만족하는 결과만 가져오고 싶은 경우 다음과 같이 설정할 수 있습니다.

let predicate = NSPredicate(format: "age > %@", argumentArray: [25])
fetchRequest.predicate = predicate

위의 예시 코드에서는 age 속성이 25보다 큰 결과만을 가져오도록 설정하였습니다.

결과 가져오기

NSFetchRequest를 사용하여 구성한 검색 요청을 실행하고 결과를 가져오려면 execute() 메서드를 호출해야 합니다. 결과는 [Any] 형식으로 반환됩니다. 이를 원하는 타입으로 캐스팅하여 사용할 수 있습니다.

do {
    let results = try context.fetch(fetchRequest)
    if let entities = results as? [YourEntityName] {
        // 사용자 정의 로직
    }
} catch {
    print("Error executing fetch request: \(error)")
}

위의 예시 코드에서는 YourEntityName으로 결과를 캐스팅하여 사용하는 방법을 보여줍니다.

이제 NSFetchRequest를 사용하여 Core Data에서 데이터를 검색하는 방법을 알게 되었습니다. NSFetchRequest를 적절하게 활용하여 데이터 검색과 관리를 효율적으로 수행할 수 있습니다.

참고 문서: