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

回答編集履歴

3

修正

2016/04/29 11:25

投稿

_Kentarou
_Kentarou

スコア8490

answer CHANGED
@@ -1,22 +1,117 @@
1
- [マイグレーションを実行る](https://realm.io/jp/docs/swift/latest/#section-40)
1
+ 最低限の記述ですがとりあえずマイグレーションが出来ましたので記載しま
2
2
 
3
- イトに例として記述してある上側の例で記述したら、自分の環境ではうまくいきました。
3
+ ★ 1回目ンスール実行
4
4
 
5
5
  ```swift
6
+ // AppDelegate -------------
7
+
8
+ import UIKit
9
+ import RealmSwift
10
+
11
+ @UIApplicationMain
12
+ class AppDelegate: UIResponder, UIApplicationDelegate {
13
+
14
+ var window: UIWindow?
15
+
16
+ func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
17
+
6
- let config = Realm.Configuration(
18
+ Realm.Configuration.defaultConfiguration = Realm.Configuration(
7
- // 新しいスキーマバージョンを設定します。以前のバージョンより大きくなければなりません。
8
- // (スキーマバージョンを設定したことがなければ、最初は0が設定されています)
9
- schemaVersion: 1,
19
+ schemaVersion: 0,
10
-
11
- // マイグレーション処理を記述します。古いスキーマバージョンのRealmを開こうとすると
12
- // 自動的にマイグレーションが実行されます。
13
- migrationBlock: { migration, oldSchemaVersion in
20
+ migrationBlock: { migration, oldSchemaVersion in
21
+
14
- // 最初のマイグレーションの場合、`oldSchemaVersion`は0です
22
+ migration.enumerate(Person.className()) { oldObject, newObject in
23
+
15
- if (oldSchemaVersion < 1) {
24
+ if oldSchemaVersion < 1 {
16
-
17
- // 何もする必要はありません!
18
- // Realmは自動的に新しく追加されたプロパティと、削除されたプロパティを認識します。
25
+ newObject?["lastName"] = "MyLastaName"
26
+ }
27
+ }
28
+ })
29
+ return true
30
+ }
31
+ }
32
+
33
+
19
- // そしてディスク上のスキーマを自動的にアップデートします。
34
+ // ViewController -------------
35
+
36
+ import UIKit
37
+ import RealmSwift
38
+
39
+ class ViewController: UIViewController {
40
+
41
+ override func viewDidLoad() {
42
+ super.viewDidLoad()
43
+
44
+ let realm = try! Realm()
45
+ let person = Person()
46
+ person.firstName = "MyFirstName"
47
+ person.age = 20
48
+ try! realm.write {
49
+ realm.add(person)
20
50
  }
51
+
52
+     // ログ出力
53
+     print(realm.objects(Person)[0])
54
+
21
- })
55
+ }
56
+ }
57
+
58
+ // Model -------------
59
+
60
+ import RealmSwift
61
+
62
+ // v0
63
+ class Person: Object {
64
+ dynamic var firstName = ""
65
+ dynamic var age = 0
66
+ }
22
67
  ```
68
+
69
+ ```swift
70
+ // Log出力
71
+ Person {
72
+ firstName = MyFirstName;
73
+ age = 20;
74
+ }
75
+ ```
76
+
77
+ ★ 2回目マイグレーション実行
78
+
79
+ ```swift
80
+
81
+ 変更場所
82
+
83
+ // AppDelegate -------------
84
+ // 0 => 1
85
+ schemaVersion: 1,
86
+
87
+
88
+ // ViewController -------------
89
+
90
+ // 以下をコメントアウト
91
+ /*
92
+ let person = Person()
93
+ person.firstName = "MyFirstName"
94
+ person.age = 20
95
+ try! realm.write {
96
+ realm.add(person)
97
+ }
98
+ */
99
+
100
+ // Model -------------
101
+ // lastNameを追加
102
+ // v1
103
+ class Person: Object {
104
+ dynamic var firstName = ""
105
+ dynamic var lastName = ""
106
+ dynamic var age = 0
107
+ }
108
+ ```
109
+
110
+ ```swift
111
+ Person {
112
+ // Log出力
113
+ firstName = MyFirstName;
114
+ age = 20;
115
+ lastName = MyLastaName;
116
+ }
117
+ ```

2

修正

2016/04/29 11:25

投稿

_Kentarou
_Kentarou

スコア8490

answer CHANGED
@@ -1,8 +1,6 @@
1
- realmのドキュメントと少し書き方が違うようです。
2
1
  [マイグレーションを実行する](https://realm.io/jp/docs/swift/latest/#section-40)
3
2
 
4
- 以下の様に記述したら、自分の環境ではうまくいきました。
3
+ サイト例として記述してある上側の例で記述したら、自分の環境ではうまくいきました。
5
- 更にエラーが出るようならば違う問題かも知れません、、、
6
4
 
7
5
  ```swift
8
6
  let config = Realm.Configuration(

1

修正

2016/04/29 09:43

投稿

_Kentarou
_Kentarou

スコア8490

answer CHANGED
@@ -1,6 +1,9 @@
1
1
  realmのドキュメントと少し書き方が違うようです。
2
2
  [マイグレーションを実行する](https://realm.io/jp/docs/swift/latest/#section-40)
3
3
 
4
+ 以下の様に記述したら、自分の環境ではうまくいきました。
5
+ 更にエラーが出るようならば違う問題かも知れません、、、
6
+
4
7
  ```swift
5
8
  let config = Realm.Configuration(
6
9
  // 新しいスキーマバージョンを設定します。以前のバージョンより大きくなければなりません。
@@ -19,10 +22,3 @@
19
22
  }
20
23
  })
21
24
  ```
22
- 以下を削除したら大丈夫ではないですか?
23
- 更にエラーが出たら別の問題かもしれませんが、、、
24
- ```swift
25
- migration.enumerate(User.className()) { oldObject, newObject in
26
- newObject!["image"] = ""
27
- }
28
- ```