2016-09-06 5 views
4

iOS 10では、この新しい警告がスローされます。cellForRowAtIndexPathでnull以外の値を返すと予想されるメソッドからNullが返される

メソッドが返す適切なセル(例外など)を判断できない場合に、cellForRowAtIndexPathから返す適切な方法は何ですか?

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(tableView == self.selectedContentTableView) { 
     // make cell... 

     return cell; 
    } 
    else if(tableView == self.recipientTableView) { 
     // make cell... 

     return cell; 
    } 
    else { 
     NSLog(@"Some exception message for unexpected tableView"); 

     return nil; // ??? what now instead 
    } 
} 
+0

**あなたが**複数のテーブルビューを設計しているかどうかは本当に分かります。 ;-) – vadian

+0

たぶん...しかし、私は実際には、私の後ろに追加されたコーダーをすべて知ってはいけません。 ;) –

+0

*あなたの後ろにあるコーダーはすべて自分自身の責任です。 – vadian

答えて

4

そのような状況が発生してはならないプログラミングエラー場合、 適切なアクションは、プログラミングエラーが検出されて固定することができるように、エラー メッセージでプログラムを終了することである。

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(tableView == self.selectedContentTableView) { 
     // make cell... 

     return cell; 
    } 
    else if(tableView == self.recipientTableView) { 
     // make cell... 

     return cell; 
    } 
    else { 
     NSLog(@"Some exception message for unexpected tableView"); 
     abort(); 
    } 
} 

abort()機能は、したがって、コンパイラが見つからない 戻り値文句ないでしょう__attribute__((noreturn))、 でマークされます。

+0

また 'abort'と' NSLog'を組み合わせた 'fatalError'があり、ファイルと行番号も表示されます。 – Sulthan

+0

@ Suulthan:SwiftにはfatalError()があります。 Objective-Cにも存在しますか? –

+0

ああ。私はとても敏速な質問を読むのに慣れています。謝罪いたします。 – Sulthan

0

状況が100%プログラマーエラーであるため、適切な値が返されません。予想される状況(異なるテーブルビュー、モデルデータに基づくさまざまなセルタイプなど)のコードを記述し、処理されないケースが自然に返されてnilが自然に返されるようにするのが最善です。そのようなケースを調べると、意図的にエラーを隠すだけでエラーがコンパイルされます。

Objective-Cの例外に関するAppleの考え方は、プログラマーのエラーを知らせるために使用されているということです。 tableView:cellForRowAtIndexPath:nilを返すときに例外をスローすると、あなたのロジックを間違えたことをUIKitに伝えることができます。間違いを修正し、上書きしないでください。

+0

私はOPが「それを書類にしたい」と思っていません。逆に、彼は自分のコードで 'return nil;'を持っていました。これは実行時例外を引き起こします。問題は、新しいヌルタビリティアノテーションでは、スタティックアナライザが 'return nil;'に文句を言うことです。だから私はabort()を提案した。 –

関連する問題