0

私は、移行とレルムとアプリのバンドルに関するレルムのドキュメントに従っています。

次のコードを使用して、バンドルされた Realm をデフォルトの Realm にコピーしています。これはうまく機能します。

let initialURL = NSBundle.mainBundle().URLForResource("bootstrap_v001", withExtension: "realm")!
let defaultURL = Realm.Configuration.defaultConfiguration.fileURL!

if Realm.Configuration.defaultConfiguration.schemaVersion == 0 {
    do {
        try NSFileManager.defaultManager().removeItemAtURL(defaultURL)
        try NSFileManager.defaultManager().copyItemAtURL(initialURL, toURL: defaultURL)
    } catch {
        // Handle error here
        print("realm delete copy error!!")
    }
}

これはすべて正常に機能し、データを含む正しい Realm ファイルを確認できます。ただし、 realm = を使用する場合は試してみてください! Realm()、それが返す結果は常に空です。

AppDelegate.swift の上部に次の宣言があることに注意してください。

import UIKit
import RealmSwift
let uiRealm = try! Realm()

この uiRealm の最初のグローバル宣言が問題を引き起こしているかどうかはわかりません。ローカルバージョンも宣言しようとしましたが、これは修正されていないようです。

Realm ファイルが既に配置されているときにアプリケーションを再実行しても問題ないことに注意してください。

4

1 に答える 1

1

uiRealmデリゲートの上部でのインスタンス化を明確にしていただきありがとうございます。それが問題の原因であると確信しています。

Realm はそのインスタンスの内部コピーをキャッシュするRealmため、ディスク上でファイルを移動する場合は、オブジェクトを作成する前に移動することが非常に重要ですRealm()(または、Realmインスタンスが作成され、 にカプセル化されたRealm 操作を実行します@autoreleasepool)。

この場合、uiRealm最初のファイル設定を行った後にのみ、最初に触れるようにする必要があります。

于 2016-09-06T06:18:44.993 に答える