Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使UITableViewController单元格在导航时不会消失_Objective C_Uitableview_Swrevealviewcontroller - Fatal编程技术网

Objective c 使UITableViewController单元格在导航时不会消失

Objective c 使UITableViewController单元格在导航时不会消失,objective-c,uitableview,swrevealviewcontroller,Objective C,Uitableview,Swrevealviewcontroller,我正在制作一个应用程序,它使用UITableViewController,并用Web服务器的数据填充该表视图 在我的viewDidLoad中,我有一个方法,可以从上述Web服务器加载数据,将其作为自定义对象存储在数组中,然后将其加载到单元格中。这很好用 问题: 但是,每次我离开该UITableViewController,然后返回时,它都会再次加载所有内容。这是非常不必要的,所以我所做的是在NSUserDefaults中存储一个布尔值,它跟踪这是否是第一次启动应用程序。如果是(您刚刚登录),请从

我正在制作一个应用程序,它使用
UITableViewController
,并用Web服务器的数据填充该表视图

在我的
viewDidLoad
中,我有一个方法,可以从上述Web服务器加载数据,将其作为自定义对象存储在数组中,然后将其加载到单元格中。这很好用

问题:

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

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

我尝试将数组存储在
NSUserDefaults
中,然后每次都用该数据填充
tableView
,但结果是我无法将自定义对象存储在
NSUserDefaults

我想要实现的是:

每当我离开或回到所述的
TableViewController
(我使用
SWRevealViewController
),我不希望
tableView
清空。我希望所有单元格都保留下来,这样在加载
视图
和填充
表格视图
之间就没有等待时间了

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

感谢您的帮助


谢谢。

您应该创建一个单独的对象来管理从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];
}

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

您可以将“UITableViewController”设置为singleton实例,或者只创建一次并保持指向它的指针。然后你们需要你们的控制器,只需在创建的控制器上使用指针。但当我让你们不想缓存服务器上的数据时?有很多方法可以做到这一点。”NSUrlCache、NSUserDefaults、CoreData、plist。以下是我所拥有/想要的:1。当有人启动应用程序时,他们必须登录。当他们这样做时,我想从
服务器加载数据
,并填充
表视图
。2.当有人在
表视图上下拉时,我希望它重新加载来自服务器的数据。这很好。但是:3。当有人离开视图,然后又返回时,我希望
tableView
保持不变。我不想重新加载所有数据。这可能吗?请尝试在viewDidLoad中执行此操作,而不是在ViewDidDisplay中执行此操作,因为在添加视图时会调用此操作,并且在显示视图之前它将准备就绪,模拟数据“持久化”谢谢,我将尝试!但我将在哪里存储这些数据?我不能每次都从服务器上加载它,因为这会产生大量不必要的数据流量。我如何在iOS中缓存数据?有很多例子。试着用谷歌搜索你自己。以下是参考:尝试以下代码示例:-in.h类:-@property(非原子,强)NSCache*imageCache;在.m类viewDidload函数中,初始化此。self.imageCache=[[NSCache alloc]init];最后,在UITableViewCell函数中,使用这个。NewsItem*item=[newsItemsArray对象索引:indexPath.row];cell.newsttitle.text=item.title;UIImage*cachedImage=[self.imageCache-objectForKey:item.image];;if(cachedImage){cell.imageView.image=cachedImage;}返回单元格;非常感谢。我按照指南进行编码/解码,然后将其存储在NSUserDefaults中。很高兴提供帮助。然而,NSUserDefaults实际上只用于存储首选项,而不是实际数据。最好将数据写入一个文件:
[NSKeyedArchiver archiveRootObject:rootObject toFil