Upvote:3
struct ItemEditorConfig: Identifiable {
let id = UUID()
let context: NSManagedObjectContext
let item: Item
init(viewContext: NSManagedObjectContext, objectID: NSManagedObjectID) {
// create the scratch pad context
context = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
context.parent = viewContext
// load the item into the scratch pad
item = context.object(with: objectID) as! Item
}
}
struct ItemEditor: View {
@ObservedObject var item: Item // this is the scratch pad item
@Environment(\.managedObjectContext) private var context
@Environment(\.dismiss) private var dismiss // causes body to run
let onSave: () -> Void
@State var errorMessage: String?
var body: some View {
NavigationView {
Form {
Text(item.timestamp!, formatter: itemFormatter)
if let errorMessage = errorMessage {
Text(errorMessage)
}
Button("Update Time") {
item.timestamp = Date()
}
}
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button("Cancel") {
dismiss()
}
}
ToolbarItem(placement: .navigationBarTrailing) {
Button("Save") {
// first save the scratch pad context then call the handler which will save the view context.
do {
try context.save()
errorMessage = nil
onSave()
} catch {
let nsError = error as NSError
errorMessage = "Unresolved error \(nsError), \(nsError.userInfo)"
}
}
}
}
}
}
}
struct EditItemButton: View {
let itemObjectID: NSManagedObjectID
@Environment(\.managedObjectContext) private var viewContext
@State var itemEditorConfig: ItemEditorConfig?
var body: some View {
Button(action: edit) {
Text("Edit")
}
.sheet(item: $itemEditorConfig, onDismiss: didDismiss) { config in
ItemEditor(item: config.item) {
do {
try viewContext.save()
} catch {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
itemEditorConfig = nil // dismiss the sheet
}
.environment(\.managedObjectContext, config.context)
}
}
func edit() {
itemEditorConfig = ItemEditorConfig(viewContext: viewContext, objectID: itemObjectID)
}
func didDismiss() {
// Handle the dismissing action.
}
}
struct DetailView: View {
@ObservedObject var item: Item
var body: some View {
Text("Item at \(item.timestamp!, formatter: itemFormatter)")
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
EditItemButton(itemObjectID: item.objectID)
}
}
}
}
More Answer related to the Same Query
- HOW DO I IMPLEMENT A CHILD CONTEXT (COREDATA) IN SWIFTUI ENVIRONMENT? IN IOS
- HOW TO IMPLEMENT GOOGLE SEARCH APPLICATION IN IPHONE IN IOS
- UPDATE/EDIT COREDATA MANAGED OBJECT IN IOS
- HOW TO IMPLEMENT A TEXT FIELD CELL WITH CUSTOM CONTENT CONFIGURATION IN IOS 14? IN IOS
- SHOW A DIFFERENT VIEW IN CONTEXT MENUS SWIFTUI IN IOS
- MAKING CHANGES IN COREDATA RECORD, SWIFTUI IN IOS
- HOW TO IMPLEMENT MKCLUSTERANNOTATIONS IN OBJECTIVE-C? IN IOS
Upvote:2
struct ItemEditor: View {
@Environment(\.dismiss) private var dismiss
@Environment(\.managedObjectContext) private var context
@ObservedObject var item: Item
var body: some View {
NavigationView {
Form {
TextField("Name", text: Binding($item.name)!)
}
.navigationTitle("New Item")
.toolbar {
Button("Save") {
try? context.save()
dismiss()
}
}
}
}
}
Credit Goes to: stackoverflow.com
Related question with same questions but different answers
- WARNING: AVF CONTEXT UNAVAILABLE FOR +[MRAVOUTPUTCONTEXT SHAREDAUDIOPRESENTATIONCONTEXT]_BLOCK_INVOKE IN IOS
- HOW TO COMBINE 2 COREDATA PREDICATES IN SWIFT? IN IOS
- XAMARIN.IOS / AKAVACHE / ENCRYPTED CACHE WORKING EXAMPLE IN IOS
- MY ALL DATA ARE NOT GETTING STORED IN COREDATA IN IOS
- ISSUE IN CONVERTING OLD OBJECTIVE C CODE INTO ARC (AUTOMATIC REFERENCE COUNT) IN IOS
- DO UNIVERSAL APPS MEAN THAT THE DOWNLOAD SIZE IS LARGER THAN NEEDED FOR IPHONE AND IPOD DEVICES? IN IOS
- UNABLE TO PASS VALUE BACK TO PARENTVIEWCONTROLLER IN IOS
- NSCODER - ENCODING AN ARRAY, WITH MULTIPLE LEVELS OF NESTED ARRAYS IN IOS
- MISCONFIGURED PROPERTIES IN XCODE 4 IN IOS
- IOS - GETTING A WEIRD ERROR: UNRECOGNIZED SELECTOR SENT TO INSTANCE ON A UITABLEVIEW IN IOS
- AFNETWORKING: POST REQUEST WITH APPLICATION/X-WWW-FORM-URLENCODED IN IOS
- OPENGL, GLDRAWARRAYS AND IOS, BAD ACCESS? IN IOS
- ANY REASON NOT TO USE C++0X FOR IOS DEVELOPMENT? IN IOS
- PAYPAL ERROR WHEN INITIALIZING IN IOS
- CUSTOM CELL WITH VARIABLE HEIGHT IN IOS
- OBJECTIVE C - CHAR WITH UMLAUTE TO NSSTRING IN IOS
- IOS CREATE OBJECT IN IOS
- HOW TO DETECT THAT PIE/ASLR HAS BEEN ENABLED FOR MY IOS APP? IN IOS
- PROFILE DOESN'T MATCH APPLICATION IDENTIFIER COM.DOMAINNAME.HELLOWORLD IN IOS
- SECURITY OF OVER-THE-AIR DISTRIBUTION OF ENTERPRISE IPHONE APPS - OTA IOS IN IOS
- PAGE-BASED APPLICATION AND GESTURE RECOGNIZER IN IOS
- SEARCHING FOR A VALUE IN AN UNKNOWN NSMUTABLEARRAY DEPTH IN IOS
- IOS CUSTOM FONT PATH FOR UIWEBVIEWS IN IOS
- IOS WEB FORM ATTRIBUTES IN IOS
- VIEW DEBUGGING: WHAT ARE THE LAYERS OF VIEW IN ANY VIEW CONTROLLER? IN IOS
- CONVERTING AN NSSTRING TO A LOCALE SPECIFIC NSNUMBER IN IOS
- WHAT IS A GOOD WAY TO DISPLAY A SPINNER AT THE BOTTOM OF A TABLEVIEW WHEN A USER SCROLLS, BUT THE TABLEVIEW CELLS LOAD SLOWLY? IN IOS
- FACEBOOK IOS SDK - POST A PRE-FILLED MESSAGE ON USERS' WALL IN IOS
- A 1024X1024 APP STORE ICON IS REQUIRED BY IOS APPS (WATCHKIT) IN IOS
- BEST PRACTICES FOR RELEASING RETAINED VIEWS? IN IOS
- CAN AN IOS APP SUPPORT JUST 9.7 INCH IPAD AND NOT 12.9 IPAD PRO DEVICE? IN IOS
- HOW TO ADD ITEMS TO AN OUTLET COLLECTION IN XCODE IN IOS
- SWIFTUI FUNCTION THAT RETURNS EITHER TEXT OR BUTTON? IN IOS
- INVALID `PODFILE` FILE: NO SUCH FILE OR DIRECTORY @ RB_SYSOPEN - FLUTTER_MODULEā©/.IOS/FLUTTER/PODHELPER.RB IN IOS
- IOS11 SDK CAN'T ACCESS APPLICATION'S DELEGATE IN IOS
- CORE DATA, RELATIONSHIP - STORE MULTIPLE SELECTED ROWS TO ENTITY IN IOS
- NESTED GLKVIEW AND GLKVIEWCONTROLLER IN IOS
- HOW DO I RETURN AN UNMANAGED<CGCOLOR>! IN SWIFT IN IOS
- HOW TO DISABLE MULTITOUCH WHEN HAVING SEVERAL VIEWS? IN IOS
- ITUNES CONNECT COMPLAINS ABOUT MY XAMARIN FORMS APP "MISSING PURPOSE STRING IN INFO.PLIST" IN IOS
- IOS - EXPO NOTIFICATIONS.GETEXPOPUSHTOKENASYNC() NOT GETTING TOKEN IN IOS
- HOW TO COMPILE A 3RD PARTY LIBRARY TO BE USED WITH UIKIT FOR MAC/CATALYST? IN IOS
- TWEAK UI NAVIGATION ON IOS 11 IN IOS
- VALUE STORED TO KEYCHAIN IN OBJECTIVE-C CAN'T BE RETRIEVED IN SWIFT? IN IOS
- HOW TO DISABLE THE ROTATION OPTION OF PIE CHARTS IN IOS CHARTS? IN IOS
- FIREBASE RUNTIME CRASH IN IOS
- CGIMAGE MASKING WITH UIIMAGE PNGDATA() IN IOS
- HOW TO SUBMIT THE APP TO APP STORE? IN IOS
- APP IS CRASHING AFTER AN IAP - ONLY AFTER PODFILES WERE UPDATED IN IOS
- PIXEL FORMAT ERROR WITH SCENEKIT + SPRITEKIT OVERLAY ON IPHONE X IN IOS
- HOW TO DEFINE OUTLETS AND ACTIONS IN THE CLASSES PANE IN INTERFACE BUILDER IN XCODE 4? IN IOS
- MISSING TITLE BAR IN DETAIL VIEW OF UISPLITVIEWCONTROLLER IN IOS