質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

377閲覧

realm で更新のあったデータを新規データとして保存する方法を教えてください。

sgt.kowalski

総合スコア34

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/09/19 14:36

realm について教えてください。
データのクラスを、例えば以下のように定義します。

class MyData: Object { dynamic var dataID: String = "" dynamic var message: String = "" }

例えば、dataID = "1" でデータを realm に保存します。
その後、message に変更があったので、ID = "2"として realm に保存すると、dataID = "1" として保存していたデータが、dataID = "2" のデータとして上書きされてしまいます。

「一度 realm に保存したオベジェクトは追跡されていて、更新があると新規データではなく、元のデータに上書きする」んだろうなと理解しています。
(そこが便利なところなんだというのも分かるのですが)上記のような場合に、dataID = "1" のデータは保存したまま、dataID = "2" のデータとして新規に(別データとして)保存したいのです。

dataID をプライマリキーに設定してみたのですが、そうすると、データを realm に保存した後、(messageに変更があったので)プライマリキーである dataID を変更するだけで、例外処理となりアプリが落ちます。

「同じ一連のデータではあるのだけれども、内容が更新されたので、それを別データとして保存したい」という場合、realm ではどうすればいいのでしょうか?

非常に初歩的な質問なのかもしれませんが、教えてください。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。

保存作業を行う ViewController クラスの冒頭で

let realm = try! Realm()

を宣言しているため、そのクラス内では realm オブジェクトが継続した一連のデータとして扱われるということに気付きました。

保存を行う関数(ボタンアクション)の中でデータの更新をチェックし、更新があれば ID を発行し、その後で上記宣言を実施すれば、新規の realm クラスが用意されて、新規保存できることに気付きました。

たぶん、上記データチェックの前で宣言して、realm のデータと比較して更新を判断する手もあると思います。

投稿2017/09/19 15:34

sgt.kowalski

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問