从下载的plist重新加载UITableView数据

时间:2012-10-02 02:22:14

标签: objective-c ios xcode uitableview plist

首先,我对objective-c和ios开发非常新。

我有一个从互联网上下载的.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];
}

然后我将其设置为DataPath

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 个答案:

答案 0 :(得分:0)

虽然你已经解决了问题,但我应该指出一些更好的方法。

  1. 上面写的代码不应放在App Delegate中。您应该将它放在处理TableView的View Controller中。这在发布时会更有效,而且更加面向对象。
  2. 如果您打算将此应用程序提交到商店,则应谨慎将下载的数据存储在NSDocumentsDirectory中。如果用户无法随时修改数据,我强烈建议您将其保存在NSCachesDirectory中。如果没有尝试使用NSLibraryDirectory。由于iOS5 Apple不喜欢将下载的数据存储在NSDocumentsDirectory
  3. 谈到缓存,您应该以某种方式缓存数据。在上面发布的代码中,您每次运行应用程序时都会下载数据并保存。这是毫无意义的,因为如果你没有互联网连接,你的应用程序将无法正常工作,如果你从未加载它,那么就没有必要保存plist。
  4. 强烈建议的另一件事是在辅助queue中执行网络提取。如果对其执行网络提取,则将阻止主队列。我知道在这种情况下,这几乎不会引起注意,因为文件大小很小,但如果您的互联网连接不良,您会注意到UI被阻止的方式。
  5. 我指出这些事情,因为当我开始为iOS开发时,我遇到了同样的麻烦。如果您不想了解有关如何执行此操作的更多信息,请随时询问:)