2011-06-24 13 views
0

私はRSSフィードからUITableViewに入ってくるニュースをロードする必要があるニュースアプリ(TabBarアプリケーション)をビルドしています。私はそれを行うことができましたが、私が直面している問題は2つのフォールドです: - 起動時に、他のタブバーアイテムに切り替えてデータが読み込まれるまで、テーブルビューはグレー(データはありませんが応答します)のままです。私はこれがデータの待ち時間と関連していると思いますか?しかし、私はパルスのようないくつかのアプリがかなり速くデータを集めるのを見てきました。どうやってやるの?また、データが収集されるまで、空白のグレー表示を避けるにはどうすればよいですか。ところで、Webサービスからの応答はかなり速く、非常に軽いです。 - 再び、パルスアプリケーションが動作する方法を参照して、以前のデータをキャッシュすると、アプリが起動されるたびにユーザーが更新するまで新しいデータをフェッチする必要はありません。UITableViewリモートデータの問題

いくつかのコードサンプルが本当に役に立ちます。私はURLCacheの例を調べてみましたが、正直なところ私にはとても混乱しています。ありがとうございました!

答えて

1

データが取得されたときにテーブルデータをリロードしていないようです。 RSSフィードの読み込みが完了したら、[myTableVariable reloadData];を追加してください。

さまざまなアプリケーション実行間でデータをキャッシュするには、ドキュメントフォルダのファイルに保存し、起動時に読み込むことができます。新しいデータを取得するまで、キャッシュされたデータを使用します。あなたはRSSからデータをロードするまで、これは

+0

[myTableVariable reloadData]があります。 viewDidLoadではまだ空白の表示動作... – xoail

+0

viewDidLoadは、ビューが作成され、表示される前に一度だけ呼び出されます。その時までに、おそらくデータが収集されていないでしょう。 –

+0

rite、どうすればこの問題を解決できますか?また、データを保存するロジックを実装しようとしていますが、この行にエラーが表示されます。BOOL saved = [NSKeyedArchiver archiveRootObject:userInfo toFile:path];エラー: 'NSInvalidArgumentException'、理由: ' - [News encodeWithCoder:]:認識できないセレクタがインスタンス0x4e44440に送信されました' – xoail

0

tabBarの上にローディングビューを表示しようとすると、tableViewがデータの表示を終了したときに削除できます。

0

表示ローディングインジケータと非表示テーブルビューを助け

- (BOOL)SaveData 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *path = [documentsDirectory stringByAppendingString:@"/cache.dat"]; 
    NSArray *userInfo = [NSArray arrayWithObjects:@"Apples", @"Bananas", @"Oranges", nil]; 

    BOOL saved = [NSKeyedArchiver archiveRootObject:userInfo toFile:path]; 

    return saved; 
} 

- (NSArray *)LoadData 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingString:@"/cache.dat"]; 

    NSArray *userInfo = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 

    return userInfo; 
} 

希望を次のコードを適応させることができます。 XML Parserの解析が終了したら、UITableviewをリロードする必要があります。それは動作します。サーバーのたびにデータをロードしたくない場合は、すべてのデータをローカルのsqliteデータベースに格納することができます。