サブクラスがUICollectionViewCell
です。セルは多くのコンポーネントを含むストーリーボードで視覚的に設計され、これらのコンポーネントはストーリーボードを使用してSwiftサブクラスの変数にバインドされます。デコード後にUICollectionViewCellでバインディングを復元する方法
Swiftクラスは、データソースから取得したdatからコンポーネントを取り込むロジックを提供します。例えば
:
class InfoCollectionViewCell : UICollectionViewCell {
@IBOutlet weak var mainPanel : UIView!
@IBOutlet weak var panel1 : UIView!
@IBOutlet weak var firstName : UILabel!
@IBOutlet weak var lastName : UILabel!
@IBOutlet weak var address : UILabel!
etc ...
func setVariousProperties(etc) {
firstName.text = ... etc
データ・ソースは、通常のものん:
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("InfoCell", forIndexPath:indexPath)
if let c : InfoCollectionViewCell = cell as? InfoCollectionViewCell {
c.setVariousProperties(...)
}
私はもともと唯一の「実装されていません」アサーションを含むデコード/エンコード方式を実装し、それが明らかになりましたフレームワークが時にはクラスをエンコードしてデコードしていることがありました。コンポーネントを保存せずにダミーのエンコード/デコードメソッドを実装すると、コンポーネントにアクセスしたときにゼロ値で予測可能な問題が発生しました。
UICollectionViewCell
サブクラスのすべてのコントロールのエンコードとデコードのどちらかを実装する必要があるか、より良い方法を見つける必要があるようです。
コンポーネントの内容を保存するために実際には必要ない(私は思っていません)と思っています。サブクラスによって再利用されるためです。私は上書きしますコンポーネントの内容はデータソースからの値になります。明らかに、すべてのコントロールはストーリーボードで定義されています。私は、initメソッドのストーリーボードから名前で手動でフェッチすることもできますが、それは同じように面倒なように思えますし、コントロールと変数のグラフィカルなリンクを冗長にします。
良い方法がありますか?
「接続を復元する」とかそういうことはできますか?
EDIT:
はどこか質問を投稿し、恵みを追加する間、問題が起こって停止しました。私は今、私のコンポーネントのエンコードメソッドが呼び出されていないことに気付きました。だから何らかの理由で、フレームワークは自分のオブジェクトを連載してデシリアライズすることを決定していましたが、今はそうではありません。したがって、問題は発生しておらず、私はスタックトレースを提供することができません。
XCodeの一部のアップデートでこの問題が修正されたか、それ以外のものが考えられます。
私は明らかにどこかに潜んでいるいくつかのバグがあることを心配しています。
この問題を持つ他の誰?私はコメントを感謝します。 – rghome