How to limit the number of items in a fetch request
How to limit the number of items in a fetch request 관련
Updated for Xcode 15
SwiftUI’s @FetchRequest
property wrapper is great for making simple requests for objects, providing both sorting and filtering. But if you want to adjust the number of items you get back – perhaps to say “show me the first 10 items in my results” – then you need to do a little more work yourself.
First, create your @FetchRequest
property without an initial value. For example, if we wanted to work with a “ProgrammingLanguage” entity we might use this:
@FetchRequest var languages: FetchedResults<ProgrammingLanguage>
And now create a custom initializer for your view that uses NSFetchRequest
to build the exact request you want. Once you’re ready, you can put that into a regular FetchRequest
and assign it directly to your property.
For example, if we wanted to read the first 10 programming languages without any sorting or filtering, we would use this:
init() {
let request: NSFetchRequest<ProgrammingLanguage> = ProgrammingLanguage.fetchRequest()
request.fetchLimit = 10
_languages = FetchRequest(fetchRequest: request)
}
Or if we wanted to have filtering, sorting, and row limiting we can do that too:
init() {
let request: NSFetchRequest<ProgrammingLanguage> = ProgrammingLanguage.fetchRequest()
request.predicate = NSPredicate(format: "active = true")
request.sortDescriptors = [
NSSortDescriptor(keyPath: \ProgrammingLanguage.name, ascending: true)
]
request.fetchLimit = 10
_languages = FetchRequest(fetchRequest: request)
}