【Swift4】UITableViewCellにUISwitchをつけたがフリーズして困った件。

ちょっと前に、UITableViewCellにUISwitchを乗せるのをやったのですが、↓

【Swift4】UITableViewCellにUISwitchをつけたがindexPath.rowを受け取るのが大変だった件。 | iPhoneアプリ備忘録

その後いじってるとスイッチを動かしたあとぐぐっと動いてフリーズしてしまいました。
エラーなどは出ずほんとにフリーズしてしまうのです。

いろいろと動かしてみた結果、スイッチを動かした後すぐにuserDefaultsでデータを保存しようとするとフリーズしてしまうようでした。
初めに別メソッドにしてディスパッチで保存を隔離してみたのですが、駄目でした。

なんか一時的にうまく行ったのですが、やはり時々フリーズすることが有り使えませんでした。
んでいろいろと検索してみると似たような症例がいくつか…。

参考サイト
ios – テーブルビューリロードセクションがクラッシュする
iOS8のUITableViewの自爆機能について(笑)

どうもUITableViewを使っていてUITableViewCell.accessoryViewプロパティにUISwitch等のUIView関連を設定していてセクションを更新しようとするとおかしくなるらしいです。
まあ良くは理解してませんが。
スイッチがアニメーションしているときに更新等が入ると止まっちゃうようです。

なのでアニメーションが終わってから処理をしたら大丈夫かなと想像しているとこちらで解法が載っていました。

参考サイト
reloadData処理後に処理を行いたい – Qiita

参考サイトからの転載

んで、自分がしたかったのは保存なので、

こんな感じになりました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">