1

我正在制作一个使用UITableViewController, 并用来自网络服务器的数据填充该表视图的应用程序。

在我的内部viewDidLoad,我有一个从所述网络服务器加载数据的方法,将其作为自定义对象存储在数组中,然后将其加载到单元格中。这工作正常。

问题:

但是,每次我离开那个UITableViewController,然后返回时,它都会再次加载所有内容。这是非常不必要的,所以我所做的是将 a 存储boolean在 中NSUserDefaults,它会跟踪这是否是第一次启动应用程序。如果是(您刚刚登录),请从服务器加载数据。如果没有,不要。

但是,正如我所注意到的,tableView每次我离开(或返回)Controller. 此外,我存储自定义对象的所有数组现在都是空的,所以我也无法从数组中加载它。(每次我导航回TableViewController,它都是空的)

我尝试将数组NSUserDefaults存储tableViewNSUserDefaults.

我想要实现的是:

每当我离开和回到所说TableViewController的(我使用SWRevealViewController)时,我不希望tableView清空。view我希望所有单元格都保留,这样在加载和tableview填充之间没有等待时间。

如果这是不可能的,我想要第二好的。将数组存储在应用程序中的某个位置,然后在用户导航回TableViewController. 这比我的首选解决方案慢,但仍然比从我的服务器加载所有内容更快且数据消耗更少。

任何帮助表示赞赏!

谢谢。

4

2 回答 2

1

您应该创建一个单独的对象来管理从 Web 服务获取数据,然后将其存储在本地。该对象可以在应用程序委托或任何适当的地方创建并传递给表视图控制器。数据对象应该提供一个数组,然后视图控制器可以使用该数组来填充表格。您甚至可以让该数据对象在应用程序打开后立即开始从 Web 服务中提取,而不是等待表格视图控制器显示。

我不建议将视图保留在内存中,以节省加载表视图(使用本地存储的数据)所需的最少时间。除非您谈论成千上万的条目,否则您不会注意到加载视图的延迟时间。如果您正在谈论成千上万的条目,我建议您一次将几百个加载到表中。

至于存储数据,最简单的可能只是将 Web 请求的原始响应写入文件。更优雅的解决方案可能包括创建一些对象来表示数据并使用NSKeyedArchiver。将数据存储在本地是一个巨大的话题,有无数的选择,所以我建议你自己做一些谷歌搜索,以找到最适合你的解决方案。你可以从这些地方开始:

如果您使用 NSKeyedArchiver 选项,则可以通过执行以下操作生成文件路径:

+ (NSString *)dataFilePath
{
    NSURL *directory = [[NSFileManager defaultManager]
        URLForDirectory:NSLibraryDirectory
        inDomain:NSUserDomainMask
        appropriateForURL:nil
        create:YES
        error:nil
    ];
    NSURL *fullURL = [cachesDirectory URLByAppendingPathComponent:@"a_file_name"];
    return [fullURL relativePath];
}
于 2014-03-31T04:22:01.423 回答
0

当用户从服务器调用数据时,您需要在第一次将所有数据存储在缓存中。之后,每当用户导航并返回页面时,都会从缓存中加载数据。

于 2014-03-31T04:41:09.123 回答