2017-09-12 9 views
0

私は以下のようにレルムモデルクラスを持っています。レルムのリストのデフォルト値

class Trip: Object { 
    dynamic var userId: String = "" 
    dynamic var id: Int = 0 
    dynamic var startTimestamp: Int64 = 0 
    dynamic var endTimestamp: Int64 = 0 
    let bumpLocations = List<BumpLocation>() 
    let brakeLocations = List<BrakeLocation>() 
    dynamic var distance: Double = 0.0 
    dynamic var calories: Double = 0.0 
    dynamic var averageSpeed: Double = 0.0 
} 

このようなオブジェクトを作成します。これらのオブジェクトを作成する際に

let tripData: [String: Any] = [ 
    "userId": self.trip!.userId, 
    "id": self.trip!.id, 
    "startTimestamp": self.trip!.startTimestamp, 
    "endTimestamp": self.trip!.endTimestamp, 
    "distance": self.trip!.distance, 
    "calories": self.trip!.calories, 
    "averageSpeed": self.trip!.averageSpeed 
] 
realm.create(Trip.self, value: tripData, update: true) 

、特性bumpLocationsbrakeLocationsに追加すべき値が存在しません。ですから、これらのフィールドのデフォルト値を追加する必要があります。

タイプListのプロパティのデフォルト値は何ですか?

realm.createでクラッシュしました。これは、create関数は、モデルクラスのすべてのプロパティが、クラスで指定されているのと同じ方法で辞書にリストされることを期待しているからです。 bumpLocationsbrakeLocationsが不足しているため、クラスが値辞書から作成された順序が崩れますか?それでフィールドの値をbumpLocationsプロパティに追加し、calories値をbrakeLocationsプロパティに追加します。

私にはクラッシュレポートがあります。

Report #1

Report 2

デバッグコンソールでこのoutputを手に入れました。

答えて

0

いいえ、すでにRealmオブジェクトクラス定義で定義されている空のListのデフォルト値を持つため、2つのリストのデフォルト値を追加する必要はありません。括弧作成let bumpLocations = List<BumpLocation>()ラインにおいて

は、任意の入力引数なしでinitメソッドを呼び出すための簡単な表記法であるので、このラインは、実際にbumpLocations変数に空Listを割り当てます。

class Trip: Object { 
    ... 
    let bumpLocations = List<BumpLocation>() 
    let brakeLocations = List<BrakeLocation>() 
} 

以下のコードは完全に有効です。

let tripData: [String: Any] = [ 
    "userId": self.trip!.userId, 
    "id": self.trip!.id, 
    "startTimestamp": self.trip!.startTimestamp, 
    "endTimestamp": self.trip!.endTimestamp, 
    "distance": self.trip!.distance, 
    "calories": self.trip!.calories, 
    "averageSpeed": self.trip!.averageSpeed, 
] 
try! realm.write { 
    realm.create(Trip.self, value: tripData) 
} 
+0

こんにちは、返信ありがとうございます。しかし、私は 'realm.create'でクラッシュしています。私は原因と思われるもので質問を更新しました。また、問題をより詳しく説明するために、上記で少し追加したサンプルコードを変更しました。 – Isuru

+0

あなたの推論は間違っています。私の答えですでに説明したように、これらの値はデフォルト値を持つので、イニシャライザで値を指定する必要はありません。クラッシュはおそらく 'self.trip'が' nil'であるために起こりますが、もっとコードを見ることなく、確かにそれを伝えることはできません。 –

+0

私はそれが助けであれば私が得たクラッシュレポートを追加しました。 – Isuru

関連する問題