2012-10-02 60 views
0

首先,我對objective-c和ios開發非常新穎。重新加載UITableView數據從下載plist

我有一個.plist從互聯網下載,然後用於填充UITableView。如下所示,我可以在AppDelegate的ApplicationDidLaunch方法中工作。

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *finalPath = [path stringByAppendingPathComponent:@"Data.plist"]; 
NSURL *theFileURL = [NSURL URLWithString:@"http://dl.dropbox.com/u/8068058/Data.plist"]; 
NSDictionary *replace = [[NSDictionary alloc] initWithContentsOfURL:theFileURL]; 
if (replace != nil){ 
    [replace writeToFile:finalPath atomically:YES]; 
} 

然後,我將其設置爲數據通路

NSString *Path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *DataPath = [Path stringByAppendingPathComponent:@"Data.plist"]; 

NSDictionary *tempDict = [[NSDictionary alloc] initWithContentsOfFile:DataPath]; 
self.data = tempDict; 
[tempDict release]; 

這是所有罰款,然後我填充的TableView並顯示它。如果我向顯示錶格的NavgationController添加一個'刷新'按鈕。當我按下它並運行相同的下載代碼後

[self.tableView reloadData]; 

我什麼也沒得到,有沒有人知道如何解決這個問題?

+1

是你的表格視圖迷上了嗎? – aforaudrey

+0

我對錶格視圖有以下代碼。 self.tableDataSource = tempArray; 然後我有代碼將tabeDataSource設置爲plist的objectAtKey。 該表在第一次運行時表現良好,但在應用運行時我無法刷新數據 – jrgrs

+0

我的意思是,您的表視圖與Storyboard/IB中的控制器等掛鉤? – aforaudrey

回答

0

雖然你已經解決了你的問題,但我應該指出一些事情,它會更好地改變。

  1. 上面寫的代碼不應放在App Delegate中。您應該將其放置在處理TableView的View Controller中。這將在啓動時更有效,並且更加面向對象。
  2. 如果您打算將此應用程序提交給商店,請注意將下載的數據存儲在NSDocumentsDirectory中。如果用戶無法隨時編輯數據,我強烈建議您將它保存在NSCachesDirectory。如果不嘗試使用NSLibraryDirectory。由於iOS5 Apple不喜歡將下載的數據存儲在NSDocumentsDirectory中。
  3. 談到緩存,你應該以某種方式緩存你的數據。在上面發佈的代碼中,您每次運行應用程序時都要下載數據並保存它。這種說法毫無意義,因爲如果你沒有互聯網連接,你的應用程序將無法工作,並且如果你從不加載它,沒有必要保存plist。
  4. 強烈建議的另一件事是執行二次queue網絡獲取。如果您在其上執行網絡抓取,主隊列將被阻止。我知道在這種情況下,這幾乎沒有引起注意,因爲文件大小很小,但如果你的網絡連接不好,你會注意到UI是如何被阻止的。

我指出了這些事情,因爲當我開始爲iOS開發時,我面臨同樣的麻煩。如果你想了解更多關於如何做到這一點的信息,請隨時詢問:)