< How to delete Core Data objects from SwiftUI views | How to create a document-based app using FileDocument and DocumentGroup > |
Updated for Xcode 12.5
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)
}
SPONSORED Emerge helps iOS devs write better, smaller apps by profiling binary size on each pull request and surfacing insights and suggestions. Companies using Emerge have reduced the size of their apps by up to 50% in just the first day. Built by a team with years of experience reducing app size at Airbnb.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.