< How to delete Core Data objects from SwiftUI views | How to create a document-based app using FileDocument and DocumentGroup > |
Updated for Xcode 14.2
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 From March 20th to 26th, you can join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.