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

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

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

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

Swift

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

Q&A

解決済

1回答

1210閲覧

Realmについての質問です。

tomichi

総合スコア16

Realm

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

Swift

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

0グッド

1クリップ

投稿2020/08/20 07:17

前提・実現したいこと

Realmを使ってCounterという変数を保存したいです。

該当のソースコード

Swift

1class postViewController: UIViewController, UITextFieldDelegate { 2 3 @IBOutlet weak var minusButton: UIButton! 4 @IBOutlet weak var postLabel: UILabel! 5 @IBOutlet weak var more: UITextField! 6 7 var task = Task2() 8 let realm = try! Realm() 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 more.delegate = self 14 postLabel.text = "(task.Counter)枚です!" 15 16 if task.Counter == 0{ 17 minusButton.isEnabled = false 18 postLabel.text = "0枚です。" 19 } 20 } 21 22 @IBAction func plusButton(_ sender: UIButton) { 23 24 minusButton.isEnabled = true 25 try! realm.write{ 26 task.Counter += 1 27 self.realm.add(self.task) 28 } 29 postLabel.text = "(task.Counter)枚です!" 30 }

Swift

1class Task2: Object{ 2 @objc dynamic var Counter = 0 3}

試したこと

ネットを調べて作ってみたのですが、なかなかうまくいきません。
シュミレーターを起動するといつも「0枚です。」が表示されてしまいます。

補足情報(FW/ツールのバージョンなど)

初めてのオリジナルアプリを作っています。
温かいコメントいただけたら幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

多分上書きされていないのではないでしょうか??
(コードを見た感じfileterもsetvalueも見当たらないです。)
※イメージ図
(実際再現していないので間違っていたらすいません)
イメージ説明
今は左の状態。
目指しているのは右の状態

Realmの値を上書きしたい場合は上書きしたい『レコードを指定(fileter)』して『上書き(setvalue or updatevalue)』しないといけないです。

その為にもRealm Browserをインストールされることをオススメします。
Realm使うのであれば必須です。
(データの中身見れないと問題が把握出来ないので。)

・Realm Browserの使い方
https://qiita.com/ryoegu/items/3a7543a954673396d10d
(ダウンロード→Realm Browser起動→問題のファイル.swiftにRealmを初期化コード追記→printデータベースファイルまでのパス→open -a "データベースファイルまでのパス"コマンドで自分の作ったRealmのデータベースの中身が見れます。)

一度データベースの中身を確認してみてはいかがでしょうか??

この辺も参考になりそうです。
https://teratail.com/questions/235436

投稿2020/08/20 10:34

編集2020/08/20 10:40
sunglass

総合スコア303

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

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

tomichi

2020/08/24 12:32

ご丁寧にありがとうございます。 勉強不足だったようですので、再度勉強し直します。
sunglass

2020/08/25 05:00

頑張ってください。わからない事ありましたらどんどん質問して聞いた方が良いです。 今回のケースはTask2クラスにid(初期値:0)も追加してください。次にpostViewControllerクラスのtry! realm.write{...}の中でlet m = realm.objects(Memo.self).filter("id===0")みたいidが0の行を指定して上書きすれば出来ると思いま。 確認するためにもRealmブラウザは必ずインストールして利用してください。
tomichi

2020/08/25 06:06

ありがとうございます。 そのように行ってみました。 let m = realm.objects(Task2.self).filter("id==0")を追加したのですが、 m += 1 をしようとしたらエラーが出ます。 idはInt型なのですが、なぜエラーが出るのでしょうか...?
sunglass

2020/08/25 07:48

ここまででわからない事ありましたら質問してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問