2016-07-28 5 views
0

UITableViewCellに関連付けられたオブジェクトを格納するために、iOSでRealm Swiftを使用しています。各セルは動的な高さであり、その高さ情報をRealmオブジェクトにも格納したいと考えています。 しかし残念ながら、Realmオブジェクトの通知ブロックにセルの高さ情報を更新するコードは、無限ループを引き起こすので挿入できません。私はそれを別のクラスに追加して、基底オブジェクトとの何らかの外部キー関係を作成して、通知ブロック内の他のオブジェクトを更新しようとすると何とか無限ループを発生させました。セルに関連付けられているレルムオブジェクトにセルの高さの値を格納するにはどうすればよいですか?

この問題を解決するにはどうすればよいでしょうか?

答えて

0

CocoaのKey Value Observingと同様に、レルムの通知は、プロパティを既存の値に設定しても、オブジェクトにプロパティを設定するとオブジェクトが変更されたことを示します。これは、通知ループをトリガーしている可能性があります。これを避けるには、通知ブロック内で、セルの高さプロパティを、オブジェクトにすでに設定されている値と同じ値に設定しているかどうかをチェックします。その場合は、プロパティの更新をスキップしてください。

+0

私の問題は、オブジェクトが更新されているため、高さを再計算する必要があることです。これは、addNotificationBlockの非常に同じオブジェクト内のheightプロパティの値を更新する必要があることを意味します。 – dickyj

+0

なぜそれが_infinite_ループを生成すると思いますか分かりません。高さプロパティを更新すると別の通知がトリガされますが、通知ブロックが呼び出された2回目の高さの計算では、オブジェクトの他のプロパティが変更されていないため同じ結果が得られます。同じ結果を計算したことを検出し、heightプロパティの設定をスキップすると、通知ブロックが1回だけ余分に呼び出されます。 – bdash

+0

addNotificationBlockでは、高さを無効にするために高さを0に設定する領域書き込みを実行します。次に、セルレイアウトコードで、高さを正しい値に設定するための領域書き込みを実行します。これにより、addNotificationBlockコードが再び実行されます。高さを0に設定する必要があります。 – dickyj

関連する問題