我正在创建一个使用UITableViewController
的应用,并使用来自网络服务器的数据填充该表格视图。
在我的viewDidLoad
内部,我有一个从所述网络服务器加载数据的方法,将其作为自定义对象存储在数组中,然后将其加载到单元格中。这工作正常。
问题:
然而,每次我离开那个UITableViewController
,然后回来,它再次加载一切。这是非常不必要的,所以我所做的是在boolean
中存储一个NSUserDefaults
,它会跟踪这是否是第一次启动应用。如果是(您刚刚登录),请从服务器加载数据。如果没有,请不要。
然而,正如我所注意到的,tableView
每次离开(或返回)Controller
时都会重置。此外,我存储自定义对象的所有数组现在都是空的,所以我也无法从数组中加载它。
(每当我导航回TableViewController
时,它都是空的)
我尝试将数组存储在NSUserDefaults
中,然后每次只使用该数据填充tableView
,但事实证明我无法在{{1}中存储自定义对象}}。
我想要实现的目标是:
每当我离开并返回说NSUserDefaults
(我使用TableViewController
)时,我都不希望SWRevealViewController
清空。我希望所有单元格都保留,这样就可以在加载tableView
和填充view
之间没有等待时间。
如果这是不可能的,我想要第二好。要将数组存储在应用程序中的某个位置,然后在用户导航回tableview
后立即将该数据重新加载到tableview中。这比我的首选解决方案慢,但是比从我的服务器加载所有内容更快,更少数据消耗。
感谢任何帮助!
感谢。
答案 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)
当用户从服务器调用数据时,您需要首次将所有数据存储在缓存中。之后,每当用户导航并返回页面从缓存加载数据时。