回答編集履歴
2
最新の情報にあわせてサンプルを修正
answer
CHANGED
@@ -46,6 +46,7 @@
|
|
46
46
|
iOS12 以降いくつか変更があったようで、ネット上の情報だけだと不足している感じでしたが、こんな感じでで保存できると思います。
|
47
47
|
|
48
48
|
要点をシンプルにするために、Playground で実行できるようにしています。
|
49
|
+
【2020.4.6: synchronize()は非推奨となっていたので修正】
|
49
50
|
|
50
51
|
```swift
|
51
52
|
import UIKit
|
@@ -73,7 +74,8 @@
|
|
73
74
|
// 保存
|
74
75
|
let data = try! NSKeyedArchiver.archivedData(withRootObject: saveColor, requiringSecureCoding: false)
|
75
76
|
UserDefaults.standard.set(data, forKey: "saveColor")
|
77
|
+
//以下の処理は非推奨になったので必要ない
|
76
|
-
UserDefaults.standard.synchronize()
|
78
|
+
//UserDefaults.standard.synchronize()
|
77
79
|
|
78
80
|
// 取得
|
79
81
|
if let data = UserDefaults.standard.object(forKey: "saveColor") as? Data {
|
1
UserDefaultを使った方法を追記
answer
CHANGED
@@ -39,4 +39,49 @@
|
|
39
39
|
|
40
40
|
なので、遷移先(のクラス)にある一時的な変数にとりあえず`attributedText`を保存し、ビューの表示が終了してから改めて再代入するようにしています。
|
41
41
|
|
42
|
-
やりたいと思っていることは、おそらく属性付きのテキスト全てをコピーする処理だとおもいますので、これでいいかと思います。
|
42
|
+
やりたいと思っていることは、おそらく属性付きのテキスト全てをコピーする処理だとおもいますので、これでいいかと思います。
|
43
|
+
|
44
|
+
---
|
45
|
+
UserDefault で保存する方法もやってみました。
|
46
|
+
iOS12 以降いくつか変更があったようで、ネット上の情報だけだと不足している感じでしたが、こんな感じでで保存できると思います。
|
47
|
+
|
48
|
+
要点をシンプルにするために、Playground で実行できるようにしています。
|
49
|
+
|
50
|
+
```swift
|
51
|
+
import UIKit
|
52
|
+
|
53
|
+
class SomeClass: NSObject, NSCoding {
|
54
|
+
|
55
|
+
let color: UIColor
|
56
|
+
|
57
|
+
init(color: UIColor) {
|
58
|
+
self.color = color
|
59
|
+
}
|
60
|
+
|
61
|
+
func encode(with aCoder: NSCoder) {
|
62
|
+
aCoder.encode(self.color, forKey: "colorkey")
|
63
|
+
}
|
64
|
+
|
65
|
+
required init?(coder aDecoder: NSCoder) {
|
66
|
+
self.color = aDecoder.decodeObject(forKey: "colorkey") as! UIColor
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
let saveColor = SomeClass(color: UIColor.red)
|
71
|
+
print("save color: ", saveColor.color)
|
72
|
+
|
73
|
+
// 保存
|
74
|
+
let data = try! NSKeyedArchiver.archivedData(withRootObject: saveColor, requiringSecureCoding: false)
|
75
|
+
UserDefaults.standard.set(data, forKey: "saveColor")
|
76
|
+
UserDefaults.standard.synchronize()
|
77
|
+
|
78
|
+
// 取得
|
79
|
+
if let data = UserDefaults.standard.object(forKey: "saveColor") as? Data {
|
80
|
+
if let restoredColor = try! NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? SomeClass {
|
81
|
+
print("loaded color :", restoredColor.color)
|
82
|
+
}
|
83
|
+
}
|
84
|
+
```
|
85
|
+
こんな感じで、`NSObject`を継承し、`NSCoding`に準拠したクラスをひとつ作り、その中に色情報を保存し、それをシリアライズして保存したりすれば良さそうです。
|
86
|
+
|
87
|
+
ただ、色情報一つだけのためにこれだけの処理を書くのも手間なので、色情報を永続的に保存したいということでなければ、やはり遷移先のプロパティに直接書き込んだ方がよさそうに思います。
|