2012-04-09 13 views
1

私はiOS開発にかなり慣れています。アイブ氏は、シンプルなRSSリーダーアプリを作ることを試みて、私はこのチュートリアルに従ってきました:WebViewで選択されたセルが表示されないRSSリーダー

http://www.raywenderlich.com/2636/how-to-make-a-simple-rss-reader-iphone-app-tutorial

このチュートリアルでは、私はXcodeの4.3.2を使用していますので、ビットを適合させる必要がありました。すべてが動作し、すべてのRSSフィードがロードされますが、記事をクリックすると詳細ビューコントローラがロードされますが、完全に空白になります。 Iveは、ストーリーボード上のDetailViewControllerにラベルやボタンを追加しようとしましたが、ロードされても表示されません。表示されるのは、上部のナビゲーションバーだけです。だから私の質問は何が間違っているのですか?私はそのコードの問題ではなく、シンプルなセットアップの問題だと確信しています。実際に私はビューに任意のオブジェクトを追加することができますが、完全に異なるビューコントローラがロードされているように表示されません。どんな助けでも大歓迎です。相続人は、私が使用してきたコード:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row]; 
_webViewController.entry = entry; 
[self.navigationController pushViewController:_webViewController animated:YES]; 

} 


- (void)viewDidLoad 
{ 

NSURL *url = [NSURL URLWithString:_entry.articleUrl];  
[self.webView loadRequest:[NSURLRequest requestWithURL:url]]; 
NSLog(@"The URL is %@",url); 


} 

をこのコードは、Xcodeの古いバージョンから採用されたために、それはストーリーボードの代わりに、個別のnibファイルとは何かを持っていますか?

オクラホマ_webviewControllerはRootViewController.h

@interface RootViewController : UITableViewController <UITableViewDelegate> { 
NSOperationQueue *_queue; 
NSArray *_feeds; 
NSMutableArray *_allEntries; 
DetailViewController *_webViewController; 

}に設定されている

@property (retain) NSOperationQueue *queue; 
@property (retain) NSArray *feeds; 
@property (retain) NSMutableArray *allEntries; 
@property (retain) DetailViewController *webViewController; 
のviewDidLoadが出回っDetailViewControllerに

IVEに設定プッシュセグエを設定されdidselectRowAtIndexがRootViewController &に設定されている

ストーリーボードで。私は今、これが正常に動作するようです残念ながらにもかかわらず

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
// test segue.identifier if needed 
DetailViewController *viewController = segue.destinationViewController; 
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
// set properties of viewController based on selection indexPath 
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row]; 
viewController.entry = entry; 
} 

の下に提案1とのtableView didSelectRowAtPath方法を交換した

、私はまだ空白のビューを取得しています。

+0

は、RSSフィードのための別の参照リンクhttp://bit.ly/HrlAGVここでは可能性の –

+0

多くニールである、あなたがチェックエラーのためのWebビューのデリゲートメソッドを実装することがありますか? webviewcontrollerでデータが適切に動いていることをNSLOgに確認しますか?静的ラベルで最初にチェックします。 – Mangesh

+0

助けてくれてありがとう、私はNSLogを使用して、次のものを手に入れました:URLが(null)です。アプリケーションがターゲット上のnil View Controllerをプッシュしようとしました。 –

答えて

1

ここに複数の問題があります。

  1. 私はあなたのナビゲーションコントローラ上でそれをプッシュする前に、あなたは何にも_webViewControllerを設定している場所が表示されません。これは、 "アプリケーションがターゲット上にnil View Controllerをプッシュしようとしました"というエラーを表示していることになり、なぜ空白の表示が表示されるのかと関係している可能性があります。

  2. 質問で引用した2つの方法はどちらも同じクラスに実装されていますか?おそらくdidSelectRowAtIndexPathがあなたのテーブルビューコントローラ(Ray WenderlichチュートリアルのRootViewController)にあり、viewDidLoadはWeb View Controllerにありますか?もしそうなら、そのような情報を質問に含めるようにしてください。もしそうでなければ、それはあなたの問題の一部かもしれません。

  3. 最も重要なことは、チュートリアルにストーリーボードを使用しようとしているようです。プラスの面では、これは、あなたがそうでなければコードでやらねばならない、IBでたくさんのことをすることができるということです。下側では、これにより、ビューコントローラ間のプログラムの「フロー」が大きく異なるため、チュートリアルを解釈するのが少し難しくなります。

主な違いは、ストーリーボードを使用してストーリーボードを作成し、プッシュ/ビューコントローラを提示する責任があるということです。 (ルートビューコントローラを持つことは維持し、ウェブビューコントローラのインスタンスを再利用することは、とにかくアンチパターンでした。)ここでは、ストーリーボードの世界で物事を行う方法は次のとおりです。

ストーリーボードを想定し
  1. はすでに、ルートテーブルビューコントローラが含まれていますライブラリのUIViewControllerをドラッグしてクラスアイデンティティをWebViewControllerに設定して、ストーリーボードにWeb View Controllerを配置します。

  2. ウェブビューコントローラへのあなたのテーブルビューでプロトタイプ細胞からコントロールドラッグ、およびそのプッシュセグエします:上記で

    drag to create segue

  3. 、アプリを実行して取得することができますテーブルビューからWebビュー(コードなし - yay!)が表示されますが、Webビューでは読み込むURLがわかりません。

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
        // test segue.identifier if needed 
        WebViewController *viewController = segue.destinationViewController; 
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
        // set properties of viewController based on selection indexPath 
        RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row]; 
        viewController.entry = entry; 
    } 
    
  4. そして、あなたはそのウェブビューにURLをロードするためのWebビューコントローラが必要です - あなたが既に持っているviewDidLoad実装:だから、あなたはあなたのテーブルビューコントローラに次のように配置する必要がありますそれには良いはずです。ここで

+0

あなたの助けを借りてくれてありがとう、私はあなたの返事に応じて私の質問を修正しました。残念ながら私はまだ空白のビューを取得しています。 –

+0

空白のビューが表示されたら、「The URL is」ログが表示されますか?もしそうでなければ、私はそれを含む 'viewDidLoad'が間違ったView Controllerに実装されているか、b)空白のビューが実際にあなたのWebViewController(またはDetailViewController)のインスタンスではないか、あなたのウェブビューを管理する)。そのログが表示されている場合、View ControllerはURLを取得していますが、Webビューに渡す際に問題があります。そのとき、 'self.WebView'は何を指していますか? – rickster

+0

空白のビューが表示されたら、「URLが(null)」というメッセージが表示されます。申し訳ありませんが、あなたは何時に 'self.webView'のポイントが何を意味するのですか? –

関連する問題