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

Posted

技术标签:

【中文标题】从下载的 plist 中重新加载 UITableView 数据【英文标题】:Reloading UITableView data from downloaded plist 【发布时间】:2012-10-02 02:22:13 【问题描述】:

首先,我对 Objective-c 和 ios 开发非常陌生。

我有一个从 Internet 下载的 .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];

我什么都没得到,有人知道如何解决这个问题吗?

【问题讨论】:

你的表格视图连接了吗? 我有下面的表格视图代码。 self.tableDataSource = tempArray;然后,我有代码将 plist 的 tabeDataSource 设置为 objectAtKey。该表在第一次运行时填充良好,但在应用程序运行时我无法刷新数据 我的意思是,您的表格视图是否与 Storyboard/IB 中的控制器等相关联? 是的,tableview是在interface builder的RootViewController中连接的 一无所获意味着tableview是空的? 【参考方案1】:

虽然你已经解决了你的问题,但我还是要指出一些最好改变的地方。

    上面写的代码不应该放在 App Delegate 中。你应该把它放在处理 TableView 的 View Controller 中。这将在启动时更加高效,并且更加面向对象。 如果您打算将此应用程序提交到商店,则应小心将下载的数据存储在NSDocumentsDirectory 中。如果用户无法随时编辑数据,我强烈建议您将其保存在NSCachesDirectory。如果不尝试使用NSLibraryDirectory。由于 iOS5 Apple 不喜欢您将下载的数据存储在 NSDocumentsDirectory 中。 谈到缓存,您应该以某种方式缓存数据。在上面发布的代码中,您正在下载数据并在每次运行应用程序时保存它。这有点毫无意义,因为如果您没有互联网连接,您的应用将无法运行,并且如果您从不加载 plist,则没有必要保存它。 我强烈推荐的另一件事是在辅助queue 中执行网络获取。如果您对其执行网络提取,主队列将被阻止。我知道在这种情况下这几乎不会引起注意,因为文件很小,但是如果您的互联网连接不好,您会注意到 UI 是如何被阻止的。

我指出这些事情是因为当我开始为 iOS 开发时,我遇到了同样的麻烦。如果您不希望获得有关如何执行此操作的更多信息,请随时询问:)

【讨论】:

以上是关于从下载的 plist 中重新加载 UITableView 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何重新加载 UIView

从 iPhone 上的表格视图中下载的内容将数组保存到 PList

NSMutableArray 从 plist 返回 Null

UITableView 无法从 CustomCell 重新加载数据

如何从其他类重新加载整个 tableview 控制器 [关闭]

从 plist 错误 Swift 加载