2016-04-16 4 views
0

次のコードを使用してHeadertableViewにAdmobバナーを表示しています。バナーはiPhoneのみで表示する必要がありますが、iPadでは表示しないでください。このコードはiPhoneで動作しますが、iPadでクラッシュしました。どこが間違っていた?USER_INTERFACE_IDIOMに基づいて目標Cを実行

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
    { 
     GADBannerView *sampleView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; 

     sampleView.adUnitID = @"ca-app-pub-mycode"; 

     sampleView.rootViewController = self; 

     [sampleView loadRequest:[GADRequest request]]; 

     return sampleView; 
    } 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
    } 
} 
+0

あなたはurクラッシュレポートを表示できます –

答えて

1

メソッドからUIView(またはサブクラス、またはnil)を返す必要があります。 iPhoneの場合はsampleViewを返していますが、このメソッドをiPadで実行すると何も返されません。

あなたがiPad上で時にビューを返すようにしたくない場合は、次の操作を行います

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
     GADBannerView *sampleView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; 

     sampleView.adUnitID = @"ca-app-pub-mycode"; 

     sampleView.rootViewController = self; 

     [sampleView loadRequest:[GADRequest request]]; 

     return sampleView; 
    } else { 
     return nil; 
    } 
} 
+0

なぜ2つの 'if'ステートメントですか?最初の 'if'に' else'を使ってください。 2つのイディオムしかありません。 – rmaddy

+0

@rmaddy - あなたは絶対に正しいです - 私はちょうどOPのコード例の変更を可能な限り最小限に抑えようとしていましたが、そうだとすれば、他は良くなり、私は修正します。 – siburb

0

メソッドの戻り値の型はそうあなたがUIViewオブジェクトを返す必要がUIViewです。表示するオブジェクトがない場合は、nilを返します。