[Mac M2 Pro 12CPU, Ventura 13.6, iOS 17.1.2, Xcode 15.0]
Apple Watchで誤ってメモを消してしまうという事故が数ヶ月内で2回発生しました。
対策としてバックアップ機能を新たに実装しました。
メモの保存時にバックアップ用Core Dataにも同じデータを追加するという仕様です。誤って消してしまってもiPhoneの方でバックアップを確認できます。
import SwiftUI
struct Draft: View {
@State var text = ""
@FocusState var nameFieldIsFocused: Bool
@Environment(\.managedObjectContext)var viewContext
var note: Note?
var noteBackup: NoteBackup?
var body: some View {
TextEditor(text:$text)
.frame(minHeight: 0, maxHeight: .infinity)
.focused($nameFieldIsFocused)
.onAppear{
DispatchQueue.main.asyncAfter(deadline:DispatchTime.now()+0.5){
nameFieldIsFocused = true
}
}
.toolbar{
ToolbarItem(placement:.navigationBarTrailing){
if(nameFieldIsFocused){
Button(action:{
if note != nil {
updateContent(note: self.note!)
}else{
addContent()
}
}){
Text("更新")
.font(.system(size: 20))
}
}
}
}
}
func updateContent(note:Note){
let date = Date()
note.creationDate = date
note.content=text
let newContent2 = NoteBackup(context:viewContext)
newContent2.creationDate = date
newContent2.content = text
// Data Modelを更新
viewContext.refreshAllObjects()
do{
try viewContext.save()
}catch{
fatalError("セーブ失敗")
}
nameFieldIsFocused = false
}
func addContent(){
let newContent = Note(context:viewContext)
let newContent2 = NoteBackup(context:viewContext)
let date = Date()
newContent.creationDate = date
newContent.content = text
newContent2.creationDate = date
newContent2.content = text
// Data Modelを更新
viewContext.refreshAllObjects()
do{
try viewContext.save()
}catch{
fatalError("セーブ失敗")
}
nameFieldIsFocused = false
}
}