2016-06-17 2 views
0

私はRealmを使用していますが、プロジェクトのバージョンは1.0.0です。私は(ウェブAPIから得られたデータで)レルムObjectのリストを作成する場合Swift Realmが書き込みブロックにオブジェクトを再追加しようとしています

、その後、構造体で、このユーティリティ関数を使用してレルムにそれらを保存しよう:

static func saveRealmObjects(objects: [Object]) { 
    defer { 
     // Never entered 
    } 

    for object in objects { 
     let realm = try! Realm() 

     do { 
      try realm.write { 
       print("TEST: 1: object: \(object)") 
       realm.add(object) 
       print("TEST: 2") 
      } 
     } catch { 
      // Never entered 
     } 
    } 
} 

(ドンしてください正確な構造で私を判断していない、私は何かが動作するかどうかを見て周りに行ってきた)。

私は、関数がTEST: 1に大丈夫取得しますが、私は関数に渡すリストでは非常に最初のObjectため、TEST: 2にそれを作るために失敗したことをprint文(主に上記削除)のリベラルな使用から伝えることができます。

私はデータを使って初めてこの機能を使用することに注意してください(シミュレータをワイプしてからアプリケーションを再起動した後に)。しかし、Objectを再作成してもう一度保存しようとすると、 。

RealmはObjectで秘密鍵を使用し、必要に応じてすべてを上書きすると仮定しました。しかし、それはちょうど立ち往生するようです。その後

は - -

それが立ち往生しています後 - 私は試してみて、(異なるRealmオブジェクトを使用して)レルムからの結果の別のセットを取得する場合、私は次のエラーを取得する:

libc++abi.dylib: terminating with uncaught exception of type realm::InvalidTransactionException: Cannot create asynchronous query while in a write transaction

FYI私は、 [使用して異なるRealmオブジェクトを作成するm個try! Realm()

-

参考のために、ここで私が保存しようとしているObjectです:

import Foundation 
import RealmSwift 

class MyObject: Object { 

    // MARK: Realm Primary Key 

    dynamic var id: String = "" 

    override static func primaryKey() -> String? { 
     return "id" 
    } 


    // MARK: Stored Properties 

    dynamic var date: NSDate? = nil 

    dynamic var numA = 0 

    dynamic var numB = 0 
    dynamic var numC = 0 

    dynamic var numD = 0 
    dynamic var numE = 0 

    dynamic var numF = 0 
    dynamic var numG = 0 

    dynamic var numH = 0 


    // MARK: Computed Properties 

    var computedNumI: Int { 
     return numD + numE 
    } 

    var computedNumJ: Int { 
     return numF + numG 
    } 

} 

(。変数名が変更されました)

-

うまくいけば、私は明らかに何かをやっているが、間違い - これは初めてのRealmの使用です。

なぜそれが固執しているのか(おそらくスレッドの問題ですか?)、さらに詳しい情報が必要な場合は、回答またはコメントしてください。ありがとうございました。

realm.add(object, update: true)

:次のようになりために必要なレルムの行に追加し https://realm.io/docs/swift/latest/#creating-and-updating-objects-with-primary-keys

答えて

1

は私が巧妙な下駄なので、私は文字通りのドキュメントを読むことで答えを見つけました更新フラグがObjectをその主キーで既に保存しているところで更新します。それはそれのいずれかが同じオブジェクトを追加しようとすると明らか警告やクラッシュのいくつかの並べ替えを与えた場合の素敵されているだろう、または他のクエリを引き起こさなかったとクラッシュするレルムへの書き込みを行いますが

-

関連する問題