导航时,UITableViewController单元格不会消失

时间:2014-03-31 03:19:02

标签: objective-c uitableview swrevealviewcontroller

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

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

问题:

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

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

我尝试将数组存储在NSUserDefaults中,然后每次只使用该数据填充tableView,但事实证明我无法在{{1}中存储自定义对象}}。

我想要实现的目标是:

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

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

感谢任何帮助!

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

就存储数据而言,最简单的可能就是将Web请求的原始响应写入文件。更优雅的解决方案可能包括创建一些对象来表示数据并使用NSKeyedArchiver。保存本地数据是一个涉及无数选项的重要主题,因此我建议您自己进行一些Google搜索以找到最适合您的解决方案。你可以从这些地方开始:

如果使用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];
}

答案 1 :(得分:0)

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