【问题标题】:Reloading UITableView data from downloaded plist从下载的 plist 中重新加载 UITableView 数据
【发布时间】: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是空的?

标签: objective-c ios xcode uitableview plist


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    相关资源
    最近更新 更多