2011-04-20 12 views
0

皆さん、私のプロジェクトに問題があります。私は内部にUITableViewを持つUIViewControllerを持っています。このテーブルはカスタムセル(LSButtonCell)を読み込みます。 私は、このビューを複数回プッシュ/ポップしようとしたと私は、この奇妙な行動を発見した: screenshot http://i.stack.imgur.com/J0b4D.png
はUITableViewCellのは、自分自身を解放しませんようです。 何が起こったのですか?何か案が?UITableViewCellの割り当て

+0

再利用可能なセルオブジェクトを返すときに行う代理人を割り当ててもよろしいですか?私は、あなたのセル設定コードの残りの部分と一緒に置こうとします。また、コードのスクリーンショットは簡単ですが、コードをカットアンドペーストして素早くプロジェクトをテストし、行動を検証する人々にとっては簡単ではありません。 – petert

答えて

0

これまでのところ大丈夫ですが、deallocが呼び出されていることを確認しました。 deallocメソッドにNSLogステートメントを追加して、それらがscreen popで呼び出されているかどうか確認してください。

1)あなたが唯一の割り当て、デリゲートを保持することはありません:

0

は、あなたのコード内のいくつかの問題があります。相互に保持する。したがって、2つのオブジェクトのどちらも割り当て解除されません。

2)ゼロ矩形でビューを開始しないようにしてください。 UIViewinitWithFrame:(CGRect)aFrameの場合、aFrameは必要な引数なので、必要な引数が0であってはならないと推測するのは簡単です。CGRectZeroはいつでも悪いトリックをプレイできます。

3)プロパティを合成するときは、プロパティの名前と異なるivarsの名前を使用します(つまり、@synthesize delegate = delegate_;)。セッターメソッドとゲッターメソッドの呼び出しを決して忘れることはありません。

あなたの問題について言えば、あなたの質問にLSButtonCellのヘッダーを追加すると役に立ちます。

+0

私は2と3に同意しません。UITableViewCellsでは、contentViewのフレームはレイアウトのサブビューまで認識されません。私はCGRectZeroで初期化し、次にlayoutSubviewsでそれに応じてフレームを設定します。 3については、私はポスターコードの問題ではなく、あなたのコードに対して行った決定だと思います。まれなケースでのみ、プロパティ名をivarの名前と異なる名前に設定します。通常、サブクラスでの衝突の命名を避けるために使用します。 – Christian

+0

確かに、それは義務的な規則ではありません。それは単なる良いスタイルの問題です。 – Zapko