Realm内のデータを更新したいです。
<環境>
Xcode 12.2
Swift 4
Realm 10.0.1
Realm のtable内はこんな感じです。Table名をInventory。その中のitemをprimary key として設定しています。
updateボタンを押した際に、画面にある1の値をinventory tableのquantityの値から引き算したい。
そこで、以下のようなコードを書きました。
Swift4
1@IBAction func Update(_ sender: Any) { 2 print("while外だよ") 3 var index = 1 4 while index > 0 { 5 print("while内にいるよ") 6 let item = itemLabel.text! 7 let quanti_num_int : Int? = Int(quantity.text!) 8 let realm = try! Realm() 9 10 let consumption = Inventory() 11 consumption.item = item 12 consumption.quantity = quanti_num_int! 13 14 //item(Apple)がinventory内にあれば、itemのquantity を新しいデータとして更新する。 15 if realm.object(ofType: Inventory.self, forPrimaryKey: consumption.item) != nil { 16 let toBeUpdatedRecords = realm.objects(Inventory.self).filter("item = '(item)'") 17 print(toBeUpdatedRecords) 18 try! realm.write { 19 for element in toBeUpdatedRecords{ 20 let exnum = element.quantity 21 print(exnum) 22 let nownum = quanti_num_int! 23 print(nownum) 24 element.quantity = exnum - nownum 25 print(element.quantity) 26 } 27 } 28 //なければAlertだす。 29 } else { 30 print("Alert") 31 } 32 index = index - 1 33 } 34 }
結果inventoryをみるとquantityの数は3-1=2になるはずが、1になってしまっています。
またterminal 内で実装結果を確認すると、なぜかボタン内の処理全体が2回ループしています。なぜなら"while外だよ"が2回でているからです!
terminal
1while外だよ 2while内にいるよ 32020-12-14 11:59:32.931839-0600 Vision+ML Example[9157:361291] Version 10.4.0 of Realm is now available: https://github.com/realm/realm-cocoa/blob/v10.4.0/CHANGELOG.md 4Results<Inventory> <0x7f93fa81f460> ( 5 [0] Inventory { 6 item = Apple; 7 quantity = 3; 8 date = 2020-12-13 20:01:56 +0000; 9 } 10) 113 121 132 14while外だよ 15while内にいるよ 16Results<Inventory> <0x7f93f8c3bd10> ( 17 [0] Inventory { 18 item = Apple; 19 quantity = 2; 20 date = 2020-12-13 20:01:56 +0000; 21 } 22) 232 241 251
while loopを付けても,付けなくても、ループしてしまいます。しかもこのループの回数は、いつもランダムです。このボタンを一回押しただけで、2回も、3回も、ときには、8回もループしてしまうのは何故でしょうか。教えてください!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/19 16:34