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)
}