uhooi / Loki

サ活記録アプリ for iOS
89 stars 6 forks source link

サ活の編集後のデータがサ活リストに反映されない #191

Closed po-miyasaka closed 1 year ago

po-miyasaka commented 1 year ago

再現動画

https://jewel-open-d5e.notion.site/mp4-edc3a8a151b24fb08e7da08b9ce2ea05

再現環境

再現しない環境

デバッグ状況

その他

po-miyasaka commented 1 year ago

一応ワークアラウンドとして以下のように修正すると再現しないことを確認しました。 まだ原因の本質は掴めていないのでワークアラウンドという言い回しになっています。。

https://github.com/uhooi/Loki/compare/main...po-miyasaka:Loki:feature/work-around-not-reflecting-edit?expand=1

SakatsuRowViewにEquatableを準拠させることで、データが変更されたときにBodyを実行するかどうかの判定ができるのですが、それを明示した形です。

uhooi commented 1 year ago

おお…とてもていねいなバグレポート、ありがとうございますー! 私も試したところ再現しました、、

185 でデグレした可能性がありそうです、、うぅ…SwiftUI ムズかしい、、、

uhooi commented 1 year ago
Fatal error: Duplicate keys of type 'Sakatsu' were found in a Dictionary.
This usually means either that the type violates Hashable's requirements, or that members of such a dictionary were mutated after insertion.
(致命的なエラー: Dictionaryに'Sakatsu'型の重複したキーが見つかりました。
これは通常、型がHashableの要件に違反しているか、そのような辞書のメンバが挿入後に変異していることを意味します。このようなディクショナリのメンバが挿入後に変更されたことを意味します。)
uhooi commented 1 year ago

@po-miyasaka #194 これで直った気がします! ご確認いただけると嬉しいです…!

po-miyasaka commented 1 year ago

@uhooi 実機&シミュレータ共に問題ありませんでした!

SakatsuEquatableではidしか見てないので結局elementでもidでも同じなのかと思ってましたが違うんですねぇ 勉強になります!

po-miyasaka commented 1 year ago

(そもそもForEachのidはHashableだし、hashValueにはEquatableの比較の値は関係ないしで盛大な勘違いが解消されました😂)

uhooi commented 1 year ago

@po-miyasaka ご確認ありがとうございますー! マージしました :+1: そうですね… ForEachidHashable なので、 Equatable は関係ないと思います…! モデル自体を Hashable に準拠させてしまっていて、それを ForEachid に使っていたので、モデルで id 以外の値が変わってもハッシュ値が変わってしまったのだと思われます…。 てことでモデルを Hashable に準拠するのもやめました https://github.com/uhooi/Loki/pull/194/commits/2049aee77a942eaf47c1716487232bda0555b360