質問編集履歴
1
UserDefaultsの書き方をシンプルにしました。プロパティラッパー等は用いていません。
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,23 +3,25 @@
|
|
3
3
|
画像のように選択した色を保存するとRGBの3つの値がObservableObjectクラスのプロパティである配列`@Published var rgbArray = [[Int]]()`に保存され、別のビューでリスト表示されるようになっています。
|
4
4
|
困っていることはアプリの履歴を消したり、本体を再起動すると配列に格納されていた要素が消えてしまうことです。
|
5
5
|
##試みている解決方法
|
6
|
+
UserDefaultsによって永続化を試みています。
|
7
|
+
```
|
8
|
+
UserDefaults.standard.set(self.favoriteArray.rgbArray,forKey: "stored")
|
9
|
+
self.favoriteArray.rgbArray.append([self.r,self.g,self.b])
|
10
|
+
```
|
11
|
+
によってrgbArrayにUseDefaultsを用いています。
|
12
|
+
リストを表示するビューでは
|
13
|
+
```
|
6
|
-
|
14
|
+
let userdefaultRgbArray: [[Int]] = UserDefaults.standard.array(forKey: "stored") as! [[Int]]
|
15
|
+
var body: some View {
|
7
16
|
|
8
|
-
`self.favoriteArray.rgbArray.append([self.r,self.g,self.b])`から
|
9
|
-
`self.userdefaluts.set(self.favoriteArray.rgbArray, forKey: "udrgbArray")`にしました。
|
10
|
-
|
11
|
-
ここで`favoriteArray`は`@EnvironmentObject var favoriteArray: ObservedRGB`です。
|
12
|
-
|
13
|
-
|
14
|
-
リストで並べるために、`var storedArray:[[Int]] = UserDefaults.standard.array(forKey: "udrgbArray") as! [[Int]]`でUserDefaultsで保存した配列を呼び出し
|
15
|
-
|
17
|
+
List {
|
16
|
-
ForEach(0..<self.
|
18
|
+
ForEach(0..<self.userdefaultRgbArray.count) { item in
|
19
|
+
|
17
|
-
ListRow(rValue: self.
|
20
|
+
ListRow(rValue: self.userdefaultRgbArray[item][0], gValue: self.userdefaultRgbArray[item][1], bValue: self.userdefaultRgbArray[item][2])
|
18
21
|
}
|
22
|
+
}
|
19
23
|
```
|
20
|
-
のように配列の数だけリスト
|
24
|
+
のようにして配列の要素の数だけリストが増えるようになっています。
|
21
|
-
ここで`ListRow`は3つのInt型を引数に持ちそれを背景色にもつビューです。
|
22
|
-
|
23
25
|
##起きているエラー
|
24
26
|
Can't preview in this fileと表示され
|
25
27
|
`| Error Domain=com.apple.dt.ultraviolet.service Code=12 "Rendering service was interrupted" UserInfo={NSLocalizedDescription=Rendering service was interrupted}`
|
@@ -32,13 +34,17 @@
|
|
32
34
|
```ColorDetail
|
33
35
|
import SwiftUI
|
34
36
|
|
37
|
+
|
35
38
|
struct ColorDetail: View {
|
36
39
|
var r:Int
|
37
40
|
var g:Int
|
38
41
|
var b:Int
|
39
42
|
@EnvironmentObject var favoriteArray: ObservedRGB
|
43
|
+
|
40
|
-
|
44
|
+
var userDefaults = UserDefaults.standard
|
45
|
+
|
41
46
|
var body: some View {
|
47
|
+
|
42
48
|
GeometryReader{ bodyView in
|
43
49
|
VStack {
|
44
50
|
Text("")
|
@@ -47,9 +53,8 @@
|
|
47
53
|
Text("R値は(self.r)G値は(self.g)B値は(self.b)")
|
48
54
|
Button(action: {
|
49
55
|
print("tapped")
|
50
|
-
|
56
|
+
UserDefaults.standard.set(self.favoriteArray.rgbArray,forKey: "stored") //rgbArray永続的に保存する
|
51
|
-
|
57
|
+
self.favoriteArray.rgbArray.append([self.r,self.g,self.b])
|
52
|
-
self.userdefaluts.set(self.favoriteArray.rgbArray, forKey: "udrgbArray")
|
53
58
|
}){
|
54
59
|
Text("保存する")
|
55
60
|
}
|
@@ -85,14 +90,17 @@
|
|
85
90
|
```
|
86
91
|
リストに並べられるビュー
|
87
92
|
```ListRow
|
88
|
-
mport SwiftUI
|
89
93
|
|
94
|
+
import SwiftUI
|
95
|
+
|
90
96
|
struct ListRow: View {
|
91
|
-
|
97
|
+
|
92
98
|
var rValue: Int
|
93
99
|
var gValue: Int
|
94
100
|
var bValue: Int
|
95
|
-
|
101
|
+
|
102
|
+
|
103
|
+
|
96
104
|
var body: some View {
|
97
105
|
|
98
106
|
Text("(String(rValue, radix: 16))(String(gValue, radix: 16))(String(bValue, radix: 16))")
|
@@ -105,7 +113,7 @@
|
|
105
113
|
struct ListRow_Previews: PreviewProvider {
|
106
114
|
static let favoriteArray = ObservedRGB()
|
107
115
|
static var previews: some View {
|
108
|
-
ListRow(rValue:
|
116
|
+
ListRow(rValue: 1, gValue: 0, bValue: 0)
|
109
117
|
}
|
110
118
|
}
|
111
119
|
```
|
@@ -115,16 +123,20 @@
|
|
115
123
|
|
116
124
|
struct MainList: View {
|
117
125
|
@EnvironmentObject var favoriteArray: ObservedRGB
|
118
|
-
|
126
|
+
let userdefaultRgbArray: [[Int]] = UserDefaults.standard.array(forKey: "stored") as! [[Int]]
|
119
127
|
var body: some View {
|
120
128
|
|
121
129
|
List {
|
122
|
-
ForEach(0..<self.
|
130
|
+
ForEach(0..<self.userdefaultRgbArray.count) { item in
|
123
131
|
|
124
|
-
ListRow(rValue: self.
|
132
|
+
ListRow(rValue: self.userdefaultRgbArray[item][0], gValue: self.userdefaultRgbArray[item][1], bValue: self.userdefaultRgbArray[item][2])
|
125
133
|
}
|
126
134
|
}
|
127
|
-
|
135
|
+
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
|
128
140
|
}
|
129
141
|
}
|
130
142
|
|