idが0またはnullの時に書き込み(上書き含む)したいです。
filterにOR検索指定するもダメでした。。
『最初に書き込む』と『(一定の検索条件の結果)上書きする』はわけた方が良いのでしょうか・・・
ViewController
1 let UserData = realm.objects(Obj.self).filter ("(id == 0) || (id == null)").first 2 3 try! realm.write { 4 UserData!.name = self.name.text 5 UserData!.target = self.target.text 6 }
Obj
1import Foundation 2import RealmSwift 3 4class Obj: Object{ 5 6 @objc dynamic var id = 0 7 @objc dynamic var name: String? 8 @objc dynamic var target: String? 9 10 override static func primaryKey() -> String? { 11 return "id" 12 } 13}
エラー内容
Thread 1: Exception: "Expected object of type int for property 'id' on object of type 'Obj', but received: (null)"
参考:https://teratail.com/questions/48049
【追記】
下記の形で一応自己解決は出来たのですがこれは正しいやり方なのでしょうか・・・?
ViewController
1 2...省略... 3 4@IBAction func saveButton(_ sender: UIButton) { 5 6 let realm = try! Realm() 7 8 // データベースの値を取得 9 let objs = realm.objects(Obj.self) 10 11 let obj = Obj() 12 13 // 値をセット 14 obj.name = textField.text 15 obj.target = Profiletextfield.text 16 17 // labelに表示 18 name.text = obj.name 19 Profile.text = obj.target 20 21 textField.text = "" 22 Profiletextfield.text = "" 23 24 // 上書き 25 DispatchQueue.main.async { 26 autoreleasepool { 27 28 let realm = try! Realm() 29 30 // DBにデータがない場合は書き込む 31 if(objs.count == 0){ 32 try! realm.write() { 33 realm.add(obj) 34 } 35 } else{ 36 // データベースに何か値がある場合はid=0を上書きする 37 let UserData = realm.objects(Obj.self).filter ("id == 0").first 38 39 try! realm.write { 40 UserData!.name = self.name.text 41 UserData!.target = self.Profile.text 42 } 43 } 44 } 45 } 46 47 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。