質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Core Data

Core DataはAppleのOS X and iOSのためのオブジェクトモデリングと持続性を持ったフレームワークです。Xcodeはエンティティー、属性そして関係性を特定するためのオブジェクトモデルの編集機能を提供します。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

1621閲覧

CoreDateのListの更新

Rnabe

総合スコア9

Core Data

Core DataはAppleのOS X and iOSのためのオブジェクトモデリングと持続性を持ったフレームワークです。Xcodeはエンティティー、属性そして関係性を特定するためのオブジェクトモデルの編集機能を提供します。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/07/30 06:46

コードの内容
CoreData swiftUIを使ってListを作っています。
コードはCoredataのtimeに1秒毎dateという変数を代入して更新させています。
読みやすいようにギリギリまでこーど

起きた問題
この時にアプリを開いてる間は画面が更新することができず、アプリをいったん閉じないとListのテキストが更新されません。

質問
アプリを開いたままListに表示されるテキストを更新するにはどうしたら良いでしょうか?
作りたい機能の性質上、変数dateをそのままListのテキストに入れるのではなく、Coredataのtimeに代入してListのテキストに表示したいです。

やろうとしたこと
swiftUIで画面を更新するにはこの3つしか分からず、ネットでも見つかりませんでした。
@State,@EnvironmentObject,@ObservedObject

swift

1import SwiftUI 2import CoreData 3 4extension Event { 5 static func create(in managedObjectContext: NSManagedObjectContext){ 6 let newEvent = self.init(context: managedObjectContext) 7 newEvent.time = Date() 8 do { 9 try managedObjectContext.save() 10 } catch { 11 fatalError() 12 } 13 } 14} 15extension Event: Identifiable {} 16 17 18struct ContentView: View { 19 var body: some View { 20 NavigationView { 21 MasterView() 22 } 23 } 24} 25 26struct MasterView: View { 27 28 @FetchRequest( 29 sortDescriptors: [NSSortDescriptor(keyPath: \Event.time, ascending: true)],animation: .default) 30 var events: FetchedResults<Event> 31 @Environment(.managedObjectContext) var viewContext 32 33 @State var date = Date() 34 let timer = Timer.publish(every: 1, on: .current, in: .common).autoconnect() 35 36 var body: some View { 37 VStack{ 38 Button(action:{ 39 Event.create(in: self.viewContext) 40 }) { 41 Text("create") 42 } 43 List { 44 ForEach(events) { event in 45 NavigationLink(destination: DetailView(event: event)) { 46 Text("(event.time!)") 47 .onReceive(self.timer) {_ in 48 event.time = self.date 49 } 50 } 51 } 52 } 53 } 54 } 55} 56struct DetailView: View { 57 @ObservedObject var event: Event 58 var body: some View { 59 Text("(event.time ?? Date())") 60 } 61} 62 63 64 65struct ContentView_Previews: PreviewProvider { 66 static var previews: some View { 67 ContentView() 68 } 69} 70

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問