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

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

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

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

Swift

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

Q&A

解決済

1回答

310閲覧

swift realm xcode

oOz

総合スコア18

Realm

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

Swift

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

0グッド

1クリップ

投稿2017/12/06 05:51

現在、UserDefaultsを使ってテキストに入力した文字をラベルに反映させ、保存するという単純なものを作りましたが。これをRealmを使って同じようにさせたいのですが、本日使い始めたのでどのようにRealmを使えばいいのかわかりません。

1:Realmを使用するためにクラス作成
2:データを保存
3:データの呼び出し
これだけでいけるとは思うのですが、まだそこまで理解ができていません。できればどこをどのように変更すればいいのか教えていただけると助かります。

swift

1import UIKit 2import RealmSwift 3 4class SubViewController: UIViewController, UITextFieldDelegate { 5 6 @IBOutlet weak var textField: UITextField! 7 @IBOutlet weak var label: UILabel! 8 9 var testText:String = "default" 10 // UserDefaults のインスタンス 11 let userDefaults = UserDefaults.standard 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 // textFiel の情報を受け取るための delegate を設定 16 textField.delegate = self 17 // デフォルト値 18 userDefaults.register(defaults: ["DataStore": "default"]) 19 20 label.text = readData() 21 } 22 23 func textFieldShouldReturn(_ textField: UITextField) -> Bool{ 24 25 testText = textField.text! 26 27 label.text = testText 28 // キーボードを閉じる 29 textField.resignFirstResponder() 30 31 saveData(str: testText) 32 33 return true 34 } 35 36 func saveData(str: String){ 37 // Keyを指定して保存 38 userDefaults.set(str, forKey: "DataStore") 39 userDefaults.synchronize() 40 } 41 42 func readData() -> String { 43 // Keyを指定して読み込み 44 let str: String = userDefaults.object(forKey: "DataStore") as! String 45 46 return str 47 } 48}

イメージ説明
本当に簡単ですが、テキストに入力するとデータを保存、ラベルに反映されページを遷移してもラベルにはすでに入力された文字が表示される。

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

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

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

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

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

t_obara

2017/12/06 09:56

この質問内容だけだと、realmのドキュメントを読むべしとか、やって欲しいことを丸投げしてるとご指摘を受けるのではないでしょうか。まずは1からでも良いのでご自身でどのように実現するのか・実現しようとしたのか試行過程などをご提示された上で、不明点をお聞きになられてはいかがでしょうか。
guest

回答1

0

ベストアンサー

もう解決しているかもしれませんが
ざっとコードだけ

Swift

1import UIKit 2import RealmSwift 3 4class strData:Object{ 5 @objc dynamic var str = "" 6} 7 8class SubViewController: UIViewController, UITextFieldDelegate { 9 let db = try! Realm() 10 11 @IBOutlet weak var textField: UITextField! 12 @IBOutlet weak var label: UILabel! 13 14 var testText:String = "default" 15 // UserDefaults のインスタンス 16 //let userDefaults = UserDefaults.standard ->削除 17 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 // textFiel の情報を受け取るための delegate を設定 21 textField.delegate = self 22 // デフォルト値 23 //userDefaults.register(defaults: ["DataStore": "default"]) ->削除 24 25 label.text = readData() 26 } 27 28 func textFieldShouldReturn(_ textField: UITextField) -> Bool{ 29 30 testText = textField.text! 31 32 label.text = testText 33 // キーボードを閉じる 34 textField.resignFirstResponder() 35 36 saveData(str: testText) 37 38 return true 39 } 40 41 func saveData(str: String){ 42 // Keyを指定して保存 43 44 //userDefaults.set(str, forKey: "DataStore") ->削除 45 //userDefaults.synchronize() ->削除 4647 let data = strData() 48 strData.str = str 49 try! self.db.write { 50 self.db.add(data) 51 } 52 53 } 54 55 func readData() -> String { 56 // Keyを指定して読み込み 57 let data = self.db.objects(strData.self) 58 59 //let str: String = userDefaults.object(forKey: "DataStore") as! String ->削除 6061 let str = data[i].str 62 63 return str 64 } 65}

最も簡単な形だとこのような感じになるかと思います

let str = data[i].str

と[i]がついているのは、検索結果のうち何番目のデータを使用するかを指定しなければならないからです
もし1件以上あることが確実で、最初のデータだけ取り出せれば良い場合はlet str = data.first!.strとすれば大丈夫です(firstとlastがあり、どちらもOptionalです)、0件であればnilで止まります
なお、検索の際の絞込やソートは別途行う必要があります(特に何も指定しなければ順番は保証されませんので、確実にデータを取り出したければ連番を振るなどしてソートのための番号を付けてあげるのが便利だと思います)

ソートをする場合は

Swift

1let data = self.db.objects(strData.self).sorted(byKeyPath: "[ソートに使う値]", ascending: true)

となります(ascendingはtrueで昇順、falseで降順になります)

投稿2017/12/17 14:35

Kenelaoy

総合スコア50

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

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

oOz

2017/12/18 02:17

曖昧な質問に丁寧に教えていただきありがとうございます。解決はしましたが、こちらを参考にもう一試してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問