3

レルム DB テーブルにレコードを追加しようとしています。

DB に必要なテーブルを表すクラス Connection があり、列を表す動的変数を作成しました。

import Foundation
import RealmSwift
import Realm

open class ConnectionState: Object {

    open dynamic var _id : String = NSUUID().uuidString
    open dynamic var a : String = ""
    open dynamic var b : String = ""
    open dynamic var c : Int = 0

    open override class func primaryKey() -> String? {
        return "_id"
    }

    required public init() {
        super.init()
    }

    required public init(realm: RLMRealm, schema: RLMObjectSchema) {
        super.init(realm: realm, schema: schema)
    }

    required public init(value: Any, schema: RLMSchema) {
        fatalError("init(value:schema:) has not been implemented")
    }
}

次に、私のコードでは、次のように書き込みトランザクションを作成してコミットしようとしています。

let ConnectionState = ConnectionState()
ConnectionState.a = "a"
ConnectionState.b = "b"
ConnectionState.c = 1
try! self.realm.write {
     self.realm.add(ConnectionState)
}

try! self.realm.commitWrite()

このコードを実行すると、次のエラーが表示されます。

Can't commit a non-existing write transaction

私は何が欠けていますか?ConnectionState クラスに init が必要ですか? commitWrite を追加する前に、レルム ブラウザでデータベースを表示しようとしていました。xCode で自分のデバイスを見つけ、コンテナーをダウンロードすることを選択しましたが、空でした。次に、commitWrite を追加する必要があると考えました

4

2 に答える 2

4
try! self.realm.write {
     self.realm.add(ConnectionState)
}

このコードは、次のコードと多少同等です (おそらくエラー処理が追加されている可能性があります)。

realm.beginWrite()
...
try! realm.commitWrite()

つまり、書き込みを 2 回コミットしようとしています。

次のようにコードを変更するだけです。

try! self.realm.write {
     self.realm.add(ConnectionState)
}

// try! self.realm.commitWrite()
于 2017-01-11T10:41:40.700 に答える