Skip to content
loading...

How to make a task list using SwiftUI and Core Data

Maegan Wilson on December 18, 2019

This post is going to walk through how to make a task list app that stores the task in Core Data. This app will have the following features: Ad... [Read Full]
markdown guide
 

Your post has been very helpful to me. Thank you.
I would like to ask you if you can create a swift file that groups all the methods (addTask, updateTask, ect) that can then be used in each view.
In swift with uikit I had create CoredataHelper shared class for use in every app with little modify.
Thank you

 

You definitely can! I do this in my production apps. I generally then add the helper as an EnvironmentObject so that I can access it when I need it.

You can see my messy source code for one of my apps here. The HelperClasses folder will have the CoreData helper CalculationManager.swift. This updates and deletes items from my CoreData context.

 

Thank you. It is very difficult, for me. Could you tell me how to extract the methods from your TaskList, since I don't think I can do it?

Here's a branch of the original project with what you're looking to do that's been implemented.

Create a new file with the functions like this one linked here.

In the ContentView.struct file, add let core_data_helper = CoreDataHelper(). Then in the button's actions, call the functions from core_data_helper.

Here's an example of addTask():

Button(action: {
    self.core_data_helper.addTask(self.taskName, context: self.context)
}){
    Text("Add Task")
}

Here's a link to what ContentView.swift should look like.

Great solution. But, wanting to move from ContentView to CoreDataHelper:
@Environment(.managedObjectContext) var context
and
@FetchRequest(
entity: Task.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \Task.dateAdded, ascending: false)],
predicate: NSPredicate(format: "isComplete == %@", NSNumber(value: false))
) var notCompletedTasks: FetchedResults
How can it be done?
It's possible?
Thank you.

You can, but the @Environment and @FetchRequest are used with SwiftUI views. I wouldn't move the @Environment to make sure that there is a context associated with the view. I also like to leave my FetchRequests in the view because that's where I need the data to be viewed.

 

Hi Maegan! This is very helpful. I'm trying to do something similar but using a One-To-Many relationship with Core Data.

 

Thanks I'm glad you found it useful!

At some point, I'd like to have more posts about Core Data and SwiftUI.

 

Looking forward to them and I'll keep hoping stackoverflow can come to the rescue haha

I know this feeling all too well! Hacking with Swift is also a great guide!

Been using Paul's resources! It's my favorite but trying to make something is way different than following the guides haha. Appreciate your responsiveness!

code of conduct - report abuse