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

Objective c 从下载的plist重新加载UITableView数据,objective-c,ios,xcode,uitableview,plist,Objective C,Ios,Xcode,Uitableview,Plist,首先,我对objective-c和ios开发真的相当陌生 我有一个.plist,它是从internet下载的,然后用于填充UITableView。我可以在AppDelegate中的ApplicationIDLaunch方法中实现这一点,如下所示 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *f

首先,我对objective-c和ios开发真的相当陌生

我有一个.plist,它是从internet下载的,然后用于填充UITableView。我可以在AppDelegate中的ApplicationIDLaunch方法中实现这一点,如下所示

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];

我一无所获,有人知道如何解决这个问题吗?

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

  • 上面编写的代码不应放在应用程序委托中。您应该将其放置在处理TableView的视图控制器中。这将在启动时更加高效,并且更加面向对象
  • 如果您计划将此应用提交到应用商店,则应小心将下载的数据存储在
    nsdocuments目录中。如果用户无法在任何时候编辑数据,我强烈建议您将其保存在
    NSCachesDirectory
    中。如果没有,请尝试使用
    NSLibraryDirectory
    。由于iOS5苹果公司不喜欢将下载的数据存储在
    NSDocumentsDirectory
  • 说到缓存,您应该以某种方式缓存数据。在上面发布的代码中,您正在下载数据,并在每次运行应用程序时保存数据。这有点毫无意义,因为如果你没有互联网连接,你的应用程序将无法工作,如果你从未加载plist,那么保存plist也没有意义
  • 我强烈建议的另一件事是在辅助
    队列中执行网络获取。如果对主队列执行网络抓取,则会阻止该队列。我知道,在这种情况下,这几乎不明显,因为文件大小很小,但如果您的internet连接不好,您会注意到UI是如何被阻止的
    
    我指出这些是因为当我开始为iOS开发时,我也遇到了同样的问题。如果您不想了解有关如何执行此操作的更多信息,请随时询问:)

    您的表视图是否已连接?我有以下表视图代码。self.tableDataSource=tempArray;然后,我有代码为plist将tabeDataSource设置为objectAtKey。表在第一次运行时填充良好,但我无法在应用程序运行时刷新数据我的意思是,您的表视图是否与Storyboard/IB中的控制器等连接?是的,表视图连接到接口生成器中的RootViewController中,但什么都没有得到。您的意思是表视图为空?