UITableViewの振る舞いが解らない

前にも書いたがターゲットをiOS5、StoryBoardを使って作る画面、UITableViewControllerを使う画面でアプリケーションを作る場合、UITableViewが扱うUITableViewCellのモードとしては"Static Cells"又は"Dynamic Prototypes"を選択できる。

前者はInterfaceBuilderを使って構成したWISYWIGなセルのインスタンスをそのまま(静的に)使うモードであり、後者はテンプレートとして用意されたセルをUITableView内でシェアするモードである。それぞれ、デリゲートメソッド-tableView:indexPathでセルを取得するためのメソッドが用意されており、それぞれ以下のように使える。

Static Cells使用時
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     //Static Cellsはxibによりインスタンス化されたUITableViewCellを行に合わせて取得する
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
}
Dynamic Prototypes使用時
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //Dynamic PrototypesはキューイングされているテンプレートとしてのUITableViewCellを識別名で取得する
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"セル識別名"];
}

以前はこれらのメソッドでnilが戻るのを考慮して、例えばDynamic Prototypesでは以下のようなメソッドで回避していたそうだ。

if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"セル識別名"];
}

最新のXcode、StoryBoardを使用したUITableViewを使うケースでは上述したメソッドでは既にnilは戻らないと聞いていたのだが、実際にはnilが戻るのだ。
そして、nilが戻る原因が分からない。
UITableViewCellに識別名(Identifier)をきちんと設定することは必要なのは理解しており、Static CellsでもDynamic prototypesでもきちんと設定しているはずなのだがそれでもnilが戻るケースがあるのだ。 かといって設定をし直したりStoryBoardを弄っているとnilが戻らなくなったりするのだ。

nilが戻る原因を特定したいのだが、それがずっと解らないでいる。