-
Notifications
You must be signed in to change notification settings - Fork 11
Persist content locally #42
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Merged
thebaer
approved these changes
Sep 11, 2020
Move sheet modifier for SettingsView outside of NavigationView
Set collection for post
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #16.
This is A Big One™ —local storage for your user collections and posts— which gets us much closer to a usable client, and it touches nearly every file in the app (plus adds a few new ones).
I'm a model, you know what I mean
We start by replacing the Post and PostCollection custom types with WFAPost and WFACollection managed objects — CoreData model objects for posts and collections, respectively. These are created in LocalStorage.xcdatamodeld and the extension classes are generated manually (Editor > Create NSManagedObject Subclass...).
Because NSManagedObjects conform to ObservableObject, we can use these directly in our SwiftUI views, and rather than maintaining an in-memory store (e.g., PostStore's
posts
array), use FetchedResults to populate (and update) our lists of collections and posts.I insist we persist
We continue by adding a shared, top-level LocalStorageManager. This instantiates and initializes our persistent container as a (static) class property, adds an observer for notifications sent when the app resigns its active state, and adds a helper method for saving changes to the managed object context.
1-800-RIP-IT-OUT
We finally go through the codebase, replacing anything related to the Post and PostCollection types with WFAPost and WFACollections. There are two main concerns here:
managedObjectContext
Environment property wrapper in our views, which lets us create, for example, FetchRequests for populating lists from FetchedResults. As a result, we don't need a PostStore type anymore, so this gets converted into a PostListModel type.