質問するログイン新規登録

回答編集履歴

2

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

2020/04/06 00:26

投稿

TsukubaDepot
TsukubaDepot

スコア5086

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を使った方法を追記

2020/04/06 00:26

投稿

TsukubaDepot
TsukubaDepot

スコア5086

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
+ ただ、色情報一つだけのためにこれだけの処理を書くのも手間なので、色情報を永続的に保存したいということでなければ、やはり遷移先のプロパティに直接書き込んだ方がよさそうに思います。