Closed po-miyasaka closed 1 year ago
一応ワークアラウンドとして以下のように修正すると再現しないことを確認しました。 まだ原因の本質は掴めていないのでワークアラウンドという言い回しになっています。。
SakatsuRowView
にEquatableを準拠させることで、データが変更されたときにBodyを実行するかどうかの判定ができるのですが、それを明示した形です。
おお…とてもていねいなバグレポート、ありがとうございますー! 私も試したところ再現しました、、
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の要件に違反しているか、そのような辞書のメンバが挿入後に変異していることを意味します。このようなディクショナリのメンバが挿入後に変更されたことを意味します。)
@po-miyasaka #194 これで直った気がします! ご確認いただけると嬉しいです…!
@uhooi 実機&シミュレータ共に問題ありませんでした!
Sakatsu
のEquatableではid
しか見てないので結局elementでもidでも同じなのかと思ってましたが違うんですねぇ
勉強になります!
(そもそもForEachのidはHashableだし、hashValueにはEquatableの比較の値は関係ないしで盛大な勘違いが解消されました😂)
@po-miyasaka ご確認ありがとうございますー! マージしました :+1:
そうですね… ForEach
の id
は Hashable
なので、 Equatable
は関係ないと思います…!
モデル自体を Hashable
に準拠させてしまっていて、それを ForEach
の id
に使っていたので、モデルで id
以外の値が変わってもハッシュ値が変わってしまったのだと思われます…。
てことでモデルを Hashable
に準拠するのもやめました https://github.com/uhooi/Loki/pull/194/commits/2049aee77a942eaf47c1716487232bda0555b360
再現動画
https://jewel-open-d5e.notion.site/mp4-edc3a8a151b24fb08e7da08b9ce2ea05
再現環境
(iPhone 15 Pro, iOS17.0)
でビルドインストール(iPhone 11 pro, iOS17.0 (public beta)
でビルドインストール再現しない環境
(iPhone 11 pro, iOS16.6.1
でAppStoreから1.6.0(15)
をインストール(iPhone 11 pro, iOS17.0 (public beta)
でAppStoreから1.6.0(15)
をインストールデバッグ状況
その他