2017-07-06 25 views
1

にいるにもかかわらず、私は新しいmessagemessagesを追加する必要があり、このコードは、持っている:レルム・ライト・トランザクション、トランザクション

func addMessage(_ message: Message) { 
    do { 
     try Realm().write { 
      self.messages.append(message) 
     } 
    } catch let error { 
     print("could not add message due to error:\n\(error)") 
    } 
} 

をしかし、私は、それは私にはどんな意味がありませんCannot modify managed RLMArray outside of a write transaction例外を取得私は既に書面で取引しているからです...

+1

レルムで使用されているあなたの現在のオブジェクトのいくつかのゲッター/セッターを持っているかもしれません。より多くのコードを提供することは役に立ちます。 – Lawliet

答えて

1

あなたはデフォルトの設定を設定することで、カスタムデフォルトの設定でlet realm = try! Realm()を使用することができますがhereを参照してください。

var config = Realm.Configuration() 

    // Set this as the configuration used for the default Realm 
    Realm.Configuration.defaultConfiguration = config 
+0

はい、これが最善の方法です。エラーメッセージが表示されましたが、本質的にはどこでも同じ設定を使用するだけでした。ありがとう! – huwr

2

writeモジュールを適用する前に、Realmオブジェクトを作成する必要があります。

GitHub documentationによると、あなたはこのようなコードを試すことができます。

func addMessage(_ message: Message) { 
    do { 
     let realm = try! Realm() 
     try! realm.write { 
      self.messages.append(message) 
     } 
    } catch let error { 
     print("Could not add message due to error:\n\(error)") 
    } 
} 

はそれが役に立てば幸い!

+0

ありがとう、私はそれが効果がないと言うことを恐れています。 – huwr

+1

シュート!私はあなたの他のコードのいくつかを見ることができますか?特に、 'self.messages.append'をどこに宣言するのが役に立つかもしれないと思います!申し訳ありませんがコードが機能しませんでした! – cosinepenguin

+0

もう一度お時間をありがとう。私は決して 'messages.append'を宣言しませんでした。これはRealmの 'List'に付属しています:' let messages = List () ' – huwr

1

問題は、特別な構成をしていない普通のRealmオブジェクトを使用していたことでした。私はレルムモバイルプラットフォームを使用しておりますので、私は同じ設定で、私はそのDBに書き込みするたびにRealmオブジェクトを作成するために必要な:

let configuration = Realm.Configuration(
       syncConfiguration: SyncConfiguration(user: user, realmURL: URL(string: "realm://127.0.0.1:9080/~/speciail")!) 
      ) 
self.realm = try! Realm(configuration: configuration) 

//now do the write transaction! 

それはリファクタリングのビットを取ったが、私は今それを持っています。私を助けるために時間を割いた皆さんに感謝します。

関連する問題