Swift

Swift:問題が起きている箇所がさっぱりわからない。はてな?

緯度・経度の丸め方を修正したら、丸めが効かない問題が出てしまいました。

表示している値と内部のDoubleの値を合わせるために丸めたのですが、丸めになっていません。すぐにわかりそうなものですが、全くどこでどうなっているか、その箇所をずっと探しています。

現象的には、丸めた座標の値が入らないということなのですが、症状的には、丸める前の値がsetされるという問題です。

考えられること

  • 丸めた値が渡っていると考えている箇所以外から値がsetされている?いや。調べてみましたが、一箇所でしかsetしていないので、それはないです。そうなると、与えている値が最初から丸められていない数字ということになります。
  • もうひとつの推理は、丸めた座標値では更新できない?多分、この線はないです。なぜなら、小数点第2位までの数値でもOKなことを確認済みだからです。
  • もうひとつの推理は、繰り返し数回呼ばれている可能性。多分、この線もないです。なぜなら、一回の実行で丸めた数値o丸められない数値➡️丸められない数値での修正・変更が起きているからです。
  • 最初から、どこかで紛れ込んでいるのでしょう。座標は4アイテムをまとめて更新しているのですが、普通に処理した上で上書きしているところに紛らわしさがあり、これを完全に分離したほうがよさそうですね。

これかな?

  • メタ情報を書き出したあと、座標が少数第4位までになっており、少数第5位が四捨五入されているようですね。
  • あっ・・・・、これはまずい。

原因判明

  • 直接な原因はパラメタを使わず、ワークの変数を使っていたことによります。
  • 本質的な原因は、Swift or Xcodeが少数第4位までしか保持せず、少数第5位を四捨五入していたことによります。

対策

  • 座標は少数第5位で四捨五入し、少数第4位までしか値として保持しない。ただし、この仕様が変更になったときのために、少数第何位までを保持するか、変数で指示できるようにしました。
  • これをUIで変更できるようにしたほうがいいかどうかは、今後、検討します。メタ情報を修正したとき、元々の写真をrewriteするケースでは、UI表示しても問題はありません。しかし、別ファイルを作る場合、座標の修正は常に可能であるという前提に立たなければ、作成した別ファイルをアプリで管理できなくなり、削除の問題が出る可能性があります。

この手の処理が複雑なのは、メタ情報に修正可能なものとそうでないものがあること、あるメタ情報を修正するとほかの関連するメタ情報が自動的に修正されてしまうものがあること等、一旦、写真の書き込みをやらないと結果がわからないことによります。修正ができた場合は先に進めばいいのですが、そうでない場合、元に戻る必要があり、これが面倒です。

Categories: Swift, 技術