2010-12-29 6 views
0

非常に奇妙な問題の解決に数時間を費やしましたが、どうやって進めるのか本当に分かりません。cellForRowAtIndexPathはデバイス上でnilを返します

私は、カスタム(サブクラス化された)UITableViewCellセルが埋め込まれたXIBから参照されるグループ化されたUITableViewを持っています。すべてのセル(各1つのセルを持つ2つのセクション)が表示されていると私は呼び出すことにより、それらのいずれかを取得しようとしています:

セルが適切に返されたシミュレータ4.2で
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:1]; 
LocationSearchFilterCell *cell = (LocationSearchFilterCell *)[filterTable cellForRowAtIndexPath:indexPath]; 


デバイス4.0.xでは、コードはNILを返します。
Simulator 4.0.xでは、コードはNILを返します。
シミュレータ4.1で、セルは正しく返されますデバイス4.1ではではありません。

私はこのアプローチをアプリケーション内の他のいくつかの場所で使用しており、セルは常に適切に返されるということです。私は、何か違ったやり方でiOSのバグと組み合わされた私の奇妙な組み合わせだと思う。

P. NILが、私はそれが作成されたときに、セルのポインタを取得し、呼び出しGDBを使用して、返されたという状況では:(それは私が提供していたものと一致する)

(gdb) po (void *)[filterTable indexPathForCell:(UITableViewCell *)0x7b08520] 

と私は有効なインデックスのパスを取得することを意味しますセルが有効で、テーブルビューに表示されます。
私はこの最後の呼び出し(ポインタによって)によって返されたオブジェクトを渡そうとしましたが、まだNILを取得します。

+0

あなたはセルを取得しようとしていますか? – Rits

+0

ボタンプレスで呼び出されるカスタムメソッド。 – pmilosev

+0

返されるオブジェクトが実際にLocationSearchFilterCell型であるかどうかを確認してください:([cell isKindOfClass:[LocationSearchFilterCell class]]) – Felix

答えて

0

興味深い、

は、それは私が、セル(stupid me :))を取得しようとする前に、誰かがテーブルビューを隠して判明しました。

私がやっていたことは、テーブルビューを非表示にするアニメーションをトリガーしていました(セルを取得しようとするメソッドから呼び出すメソッドにネストされています)。私はブレークポイントで停止していたので、アニメーションも停止したので、テーブルビューが見えるように私に縫い付けられました。

まだ理解していないのは、アニメーションがまだ終了していないのにテーブルビューが非表示になっている理由です(アニメーションのフレームを変更し、アニメーションの終了後に表を非表示に設定する)

私はこの質問に対する答えが、Device/Simulator/iOSのさまざまな組み合わせで異なる動作をする理由を説明しています。とにかく、上記の2行を上に移動するだけで解決方法は簡単です。私の推論をトリガー彼の質問のためのリッツに

感謝;)

に関してどのような方法で

関連する問題