0

首先,我对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];

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

4

1 回答 1

0

虽然你已经解决了你的问题,但我应该指出一些最好改变的事情。

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

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

于 2012-10-02T03:48:08.900 回答