2011-06-24 40 views
0

我正在構建一個新聞應用程序(TabBar應用程序),我必須將來自RSS源的最新消息加載到UITableView中。我已經設法做到了,但是我現在面臨的問題是兩個摺疊: - 啓動時,表格視圖保持灰色(沒有數據,但應用程序響應),直到我切換到其他標籤欄項目並返回查看加載的數據。我想這與收集數據的延遲有關。但是我看到一些應用程序比較快速地收集數據。我怎樣才能做到這一點?我怎樣才能避免顯示空白的灰色視圖,直到收集數據。順便說一句,從web服務的響應速度相當快,重量輕。 - 同樣,參考脈衝應用程序的工作方式,我如何緩存先前的數據,以便每次啓動應用程序時,在用戶刷新之前它不必獲取新數據?UITableView遠程數據問題

一些代碼示例真的有幫助。我試圖尋找URLCache的例子,但老實說,這對我來說很困惑。謝謝!

回答

1

在我看來,你沒有重新加載你的表數據時,數據已被檢索。當您完成加載rss提要時,只需添加[myTableVariable reloadData];

要在不同的應用程序運行之間緩存數據,您可以將其保存到文檔文件夾中的文件並在啓動時讀取它。使用緩存的數據,直到檢索到新數據。您可以修改下面的代碼

- (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; 
} 

希望這有助於

+0

我確實有[myTableVariable reloadData];在viewDidLoad中,但仍然是空白的視圖行爲... – xoail

+0

viewDidLoad僅在創建視圖並顯示之前調用一次。那時你可能沒有收集到數據。 –

+0

儀式,我怎麼去解決這個問題?另外,我試圖實現你的邏輯保存數據,但我得到這一行錯誤布爾保存= [NSKeyedArchiver archiveRootObject:userInfo toFile:path];錯誤:由於未捕獲的異常'NSInvalidArgumentException'而終止應用,原因:' - [News encodeWithCoder:]:無法識別的選擇器發送到實例0x4e44440' – xoail

0

您可以嘗試在tabBar頂部顯示加載視圖,並在tableView完成顯示數據時刪除。

0

顯示加載指示燈和隱藏的tableview,直到你從RSS加載數據。在XML解析器完成解析之後,您需要重新加載您的UITableview。那可行。如果您不希望每次爲服務器加載數據,則可以將所有數據存儲在本地sqlite數據庫中。