SwiftUI/CoreData
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
&tag(SwiftUI/CoreData);
*目次 [#g49ec28a]
#contents
*関連ページ [#r79744bb]
*参考情報 [#l8b7cd88]
-[[【SwiftUI】Core Dataの使い方:エンティエィ(Entity)を...
-[[SwiftUIでCoreDataを使う | NokkunBlog:https://ymgsapo.c...
*TODOアプリの作成。 [#b7e1f89d]
-TODOを一覧表示しチェックできる。追加は別画面で行う。
-CoreDataサポートつきでプロジェクトを生成。
-xcmodeldataを編集。Taskエンティティを追加。
-ContentView.swift
#pre{{
struct ContentView: View {
@Environment(\.managedObjectContext) private var view...
@FetchRequest(
entity: Task.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \Task...
animation: .default)
private var tasks: FetchedResults<Task>
//タスク一覧
var body: some View {
NavigationView {
// 取得したデータリストを表示
List {
ForEach(tasks) {task in
// タスクの表示
HStack {
Image(systemName: task.checked ? ...
Text("\(task.name!)")
Spacer()
}
// タスクをタップでcheckedフラグを変...
.contentShape(Rectangle())
.onTapGesture {
task.checked.toggle()
try? viewContext.save()
}
}.onDelete(perform: deleteTasks)
}
.navigationTitle("Todoリスト")
.toolbar {
ToolbarItem(placement: .navigationBarLead...
EditButton()
}
ToolbarItem(placement: .navigationBarTrai...
NavigationLink(destination: AddTaskVi...
Image(systemName: "plus")
}
}
}
Text("Select an item")
}
}
func deleteTasks(offsets: IndexSet) {
for index in offsets {
viewContext.delete(tasks[index])
}
try? viewContext.save()
}
}
struct AddTaskView: View {
@Environment(\.managedObjectContext) private var cont...
@Environment(\.presentationMode) var presentationMode
@State private var task = ""
//タスク入力
var body: some View {
Form {
Section() {
TextField("タスク入力", text: $task)
}
}
.navigationTitle("タスク追加")
.toolbar {
ToolbarItem(placement: .navigationBarTrailing...
Button("保存") {
let newTask = Task(context: context)
newTask.timestamp = Date()
newTask.checked = false
newTask.name = task
try? context.save()
presentationMode.wrappedValue.dismiss()
}
}
}
}
}
private let itemFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .medium
return formatter
}()
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView().environment(\.managedObjectContext,...
}
}
}}
-プレビューがクラッシュするのでPersistence.swiftを編集し...
#pre{{
static var preview: PersistenceController = {
let result = PersistenceController(inMemory: true)
let viewContext = result.container.viewContext
/// preview用初期データ登録処理
let newTask = Task(context: viewContext)
newTask.timestamp = Date()
newTask.checked = false
newTask.name = "初期タスク"
do {
try viewContext.save()
} catch {
// Replace this implementation with code to h...
// fatalError() causes the application to gen...
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(ns...
}
return result
}()
}}
終了行:
&tag(SwiftUI/CoreData);
*目次 [#g49ec28a]
#contents
*関連ページ [#r79744bb]
*参考情報 [#l8b7cd88]
-[[【SwiftUI】Core Dataの使い方:エンティエィ(Entity)を...
-[[SwiftUIでCoreDataを使う | NokkunBlog:https://ymgsapo.c...
*TODOアプリの作成。 [#b7e1f89d]
-TODOを一覧表示しチェックできる。追加は別画面で行う。
-CoreDataサポートつきでプロジェクトを生成。
-xcmodeldataを編集。Taskエンティティを追加。
-ContentView.swift
#pre{{
struct ContentView: View {
@Environment(\.managedObjectContext) private var view...
@FetchRequest(
entity: Task.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \Task...
animation: .default)
private var tasks: FetchedResults<Task>
//タスク一覧
var body: some View {
NavigationView {
// 取得したデータリストを表示
List {
ForEach(tasks) {task in
// タスクの表示
HStack {
Image(systemName: task.checked ? ...
Text("\(task.name!)")
Spacer()
}
// タスクをタップでcheckedフラグを変...
.contentShape(Rectangle())
.onTapGesture {
task.checked.toggle()
try? viewContext.save()
}
}.onDelete(perform: deleteTasks)
}
.navigationTitle("Todoリスト")
.toolbar {
ToolbarItem(placement: .navigationBarLead...
EditButton()
}
ToolbarItem(placement: .navigationBarTrai...
NavigationLink(destination: AddTaskVi...
Image(systemName: "plus")
}
}
}
Text("Select an item")
}
}
func deleteTasks(offsets: IndexSet) {
for index in offsets {
viewContext.delete(tasks[index])
}
try? viewContext.save()
}
}
struct AddTaskView: View {
@Environment(\.managedObjectContext) private var cont...
@Environment(\.presentationMode) var presentationMode
@State private var task = ""
//タスク入力
var body: some View {
Form {
Section() {
TextField("タスク入力", text: $task)
}
}
.navigationTitle("タスク追加")
.toolbar {
ToolbarItem(placement: .navigationBarTrailing...
Button("保存") {
let newTask = Task(context: context)
newTask.timestamp = Date()
newTask.checked = false
newTask.name = task
try? context.save()
presentationMode.wrappedValue.dismiss()
}
}
}
}
}
private let itemFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .medium
return formatter
}()
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView().environment(\.managedObjectContext,...
}
}
}}
-プレビューがクラッシュするのでPersistence.swiftを編集し...
#pre{{
static var preview: PersistenceController = {
let result = PersistenceController(inMemory: true)
let viewContext = result.container.viewContext
/// preview用初期データ登録処理
let newTask = Task(context: viewContext)
newTask.timestamp = Date()
newTask.checked = false
newTask.name = "初期タスク"
do {
try viewContext.save()
} catch {
// Replace this implementation with code to h...
// fatalError() causes the application to gen...
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(ns...
}
return result
}()
}}
ページ名: