

Swift 2.1  
Realm 0.98

イメージとしては、クイズアプリの様に複数の質問と回答がDBに格納されて、  
質問一覧から選択すると、質問文が表示され、回答を出す。

たった今Realmを導入したばかりで、全体の流れもあまり理解できておりません。

更新ドキュメントを見ましたが、モデルを作成してそこでデータに関する処理ができます。  
という形でしか理解できませんでした。

イメージのものを作成する流れを教えて頂けますでしょうか。


CC BY-SA 3.0
2016-03-20T18:19:26.620
23306
2016-09-16T06:18:19.503
2016-03-21T02:25:13.990
5519
14872
question
ios swift realm
Realmで初期データを作成をしたいのですが、やり方がわかりません。


まずデータとなる質問と回答の構造を考えます。  
最低限必要なのは問題文と回答のテキストですね。アプリの性質によっては順番や難易度などが必要かもしれません。必要なデータ項目を洗い出して、それを元にクラスを設計します。

Realmではクラスがそのまま一般のデータベースでいうテーブルになります。

クラスを作るところまでできれば、実際の問題文と回答のデータをRealmに保存していきます。

これが初期データとなります。初期データの作成は適当なプロジェクトを作ってシミュレータでやるのが簡単です。

初期データの作成が完了したら、できたファイルを本当のアプリケーションのプロジェクトにコピーして組み込みます。  
実際のアプリケーションでは組み込んだファイルを読み込んで使用します。

大まかな流れは上記のようになります。

現在の様子ですと、より詳しくは、Realmのチャットサポート（日本語で質問できます） <http://slack.realm.io/>
を使って聞かれるのが良いと思います。


CC BY-SA 3.0
2016-03-20T23:56:32.337
23310
2016-03-20T23:56:32.337
5519
23306
answer


私は初期データ（＝シードデータ）の投入にあたっては、初回起動処理用のフラグを設けて、初回起動時にだけ流し込みを行っています。  
具体的にはAppDelegateで処理をしていますので、具体的なコードをみてください（文量の関係上、一部メソッドを省略してます）。  
`insertSeedData`メソッドで、kishikawa katsumiさんがご回答された準備の上で、書き込み処理を追加してください。

[code]

    import UIKit
    import RealmSwift
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
        let defaults = NSUserDefaults()
    
        func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    
            // 初回起動処理
            let dic = ["initialLaunch": true]
            defaults.registerDefaults(dic)
            defaults.synchronize()
    
            if defaults.boolForKey("initialLaunch") == true {
                print("initial setup start")
                self.initialSetUp()
            }
    
            return true
        }
    
        func initialSetUp() {
            // 初回マイグレーション
            self.realmMigration()
            // シードデータ投入
            self.insertSeedData()
            // 初回起動済みのフラグを立てる
            self.defaults.setBool(false, forKey: "initialLaunch")
            self.defaults.synchronize()
        }
    
        func realmMigration() {
            let config = Realm.Configuration(
                // 新しいスキーマバージョンを設定します。以前のバージョンより大きくなければなりません。
                // （スキーマバージョンを設定したことがなければ、最初は0が設定されています）
                schemaVersion: 1,
    
                // マイグレーション処理を記述します。古いスキーマバージョンのRealmを開こうとすると
                // 自動的にマイグレーションが実行されます。
                migrationBlock: { migration, oldSchemaVersion in
                    if (oldSchemaVersion < 1) {
                        // 何もする必要はありません！
                        // Realmは自動的に新しく追加されたプロパティと、削除されたプロパティを認識します。
                        // そしてディスク上のスキーマを自動的にアップデートします。
                    }
            })
    
            // デフォルトRealmに新しい設定を適用します
            Realm.Configuration.defaultConfiguration = config
    
            // Realmファイルを開こうとしたときスキーマバージョンが異なれば、
            // 自動的にマイグレーションが実行されます
            let realm = try! Realm()
        }
    
        func insertSeedData() {
            // realm
            let realm = try! Realm()
            // 空のアプリユーザーを作成
            let appUser = User()
            appUser.id = 1
            // 書き込み処理
            try! realm.write {
                realm.add(appUser, update: true)
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2016-03-27T05:50:02.220
23499
2016-03-27T05:50:02.220
303
23306
answer