回答編集履歴

2

最新の情報にあわせてサンプルを修正

2020/04/06 00:26

投稿

TsukubaDepot
TsukubaDepot

スコア5086

test CHANGED
@@ -94,6 +94,8 @@
94
94
 
95
95
  要点をシンプルにするために、Playground で実行できるようにしています。
96
96
 
97
+ 【2020.4.6: synchronize()は非推奨となっていたので修正】
98
+
97
99
 
98
100
 
99
101
  ```swift
@@ -148,7 +150,9 @@
148
150
 
149
151
  UserDefaults.standard.set(data, forKey: "saveColor")
150
152
 
153
+ //以下の処理は非推奨になったので必要ない
154
+
151
- UserDefaults.standard.synchronize()
155
+ //UserDefaults.standard.synchronize()
152
156
 
153
157
 
154
158
 

1

UserDefaultを使った方法を追記

2020/04/06 00:26

投稿

TsukubaDepot
TsukubaDepot

スコア5086

test CHANGED
@@ -81,3 +81,93 @@
81
81
 
82
82
 
83
83
  やりたいと思っていることは、おそらく属性付きのテキスト全てをコピーする処理だとおもいますので、これでいいかと思います。
84
+
85
+
86
+
87
+ ---
88
+
89
+ UserDefault で保存する方法もやってみました。
90
+
91
+ iOS12 以降いくつか変更があったようで、ネット上の情報だけだと不足している感じでしたが、こんな感じでで保存できると思います。
92
+
93
+
94
+
95
+ 要点をシンプルにするために、Playground で実行できるようにしています。
96
+
97
+
98
+
99
+ ```swift
100
+
101
+ import UIKit
102
+
103
+
104
+
105
+ class SomeClass: NSObject, NSCoding {
106
+
107
+
108
+
109
+ let color: UIColor
110
+
111
+
112
+
113
+ init(color: UIColor) {
114
+
115
+ self.color = color
116
+
117
+ }
118
+
119
+
120
+
121
+ func encode(with aCoder: NSCoder) {
122
+
123
+ aCoder.encode(self.color, forKey: "colorkey")
124
+
125
+ }
126
+
127
+
128
+
129
+ required init?(coder aDecoder: NSCoder) {
130
+
131
+ self.color = aDecoder.decodeObject(forKey: "colorkey") as! UIColor
132
+
133
+ }
134
+
135
+ }
136
+
137
+
138
+
139
+ let saveColor = SomeClass(color: UIColor.red)
140
+
141
+ print("save color: ", saveColor.color)
142
+
143
+
144
+
145
+ // 保存
146
+
147
+ let data = try! NSKeyedArchiver.archivedData(withRootObject: saveColor, requiringSecureCoding: false)
148
+
149
+ UserDefaults.standard.set(data, forKey: "saveColor")
150
+
151
+ UserDefaults.standard.synchronize()
152
+
153
+
154
+
155
+ // 取得
156
+
157
+ if let data = UserDefaults.standard.object(forKey: "saveColor") as? Data {
158
+
159
+ if let restoredColor = try! NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? SomeClass {
160
+
161
+ print("loaded color :", restoredColor.color)
162
+
163
+ }
164
+
165
+ }
166
+
167
+ ```
168
+
169
+ こんな感じで、`NSObject`を継承し、`NSCoding`に準拠したクラスをひとつ作り、その中に色情報を保存し、それをシリアライズして保存したりすれば良さそうです。
170
+
171
+
172
+
173
+ ただ、色情報一つだけのためにこれだけの処理を書くのも手間なので、色情報を永続的に保存したいということでなければ、やはり遷移先のプロパティに直接書き込んだ方がよさそうに思います。