2014-09-12 35 views
0

我是iOS新手,我正在使用AF-Networking框架来获取Web服务并成功获取数据并将其加载到UI元素中现在我的问题是应用程序性能变慢并且它正在加载Web服务每次我想在本地缓存图像和数据并提高应用程序的性能时,任何人都可以通过适当的解决方案来帮助我。如何实现本地缓存Web服务的数据在iPhone应用程序中恢复回来?

由于提前

+1

在AFNetworking缓存功能已由NSURLCache及其任何子类提供。检查此链接http://blog.originate.com/blog/2014/02/20/afimagecache-vs-nsurlcache/ – 2014-09-12 10:19:58

+1

我建议您使用Core Date,将Web服务数据复制到您的核心数据实体并使用它。您的性能会变得更好。 http://www.raywenderlich.com/934/core-data-tutorial-for-ios-getting-started – 2014-09-12 11:54:20

+0

@Ganesh:是的,我以前通过这个链接,但dint发现如何实现它可以详细说明,如果你'重新认识它。 – satishiOS25 2014-09-12 12:06:11

回答

1

我认为你是在谈论无关与NSURLCache但在本地保存以前的网络请求数据内容。然后下一次发送网络请求之前,您可以先从本地文件读取

在本地保存数据的方式有很多种,如Core Data NSKeyedArchiver plist FMDB。这是我使用NSKeyedArchiver的方式。
(将接口设置在这里,你可以在此链接https://github.com/dopcn/HotDaily/blob/master/HotDaily/HDCacheStore.m读取实现)在XXXAppDelegate.m

@interface HDCacheStore : NSObject 

+ (HDCacheStore *)sharedStore; 
@property (copy, nonatomic) NSArray *mainListCache; 
@property (copy, nonatomic) NSArray *funinfoListCache; 
- (BOOL)save; 

@end 

- (void)applicationWillResignActive:(UIApplication *)application //Or some other place 
{ 
    if ([[HDCacheStore sharedStore] save]) { 
     NSLog(@"save success"); 
    } else { 
     NSLog(@"save fail"); 
    } 
} 
+0

“我认为你所说的与NSURLCache无关,而是在本地保存以前的网络请求数据。”这完全是NSURLCache的功能。 – quellish 2014-09-12 15:39:43

+0

哦,我很抱歉,我以为'NSURLCashe'只是某种内存缓存。但只要在文档中找到“它提供了一个复合内存和磁盘缓存”。我会稍后更新答案 – dopcn 2014-09-12 23:38:40

+0

@dopcn:如果我们使用这个缓存是不需要的?如果我面临任何错误 – satishiOS25 2014-09-15 09:30:26

0

我认为你必须使用NSUserDefaults的,请按照下列

1:创建您需要的数据NSArray

2:用钥匙保存到NSUserDefaults中

3:现在你能够使用的NSArray每类应用

4:如果你想更新数据,只需再次保存到与NSUserDefaults的旧钥匙

所以你不需要每次下载数据,只需下载一次并保存到NSUserDefaults中并使用。 如果在保存在NSUserDefaults的数据再看看代码波纹管

存储信息的问题:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults setObject:arrayOfImage forKey:@"tableViewDataImage"]; 
[userDefaults setObject:arrayOfText forKey:@"tableViewDataText"]; 

检索信息:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
NSArray *arrayOfImages = [userDefaults objectForKey:@"tableViewDataImage"]; 
NSArray *arrayOfText = [userDefaults objectForKey:@"tableViewDataText"]; 
// Use 'yourArray' to repopulate your UI 
+0

好吧,这应该在AppDelegate中声明? – satishiOS25 2014-09-26 06:39:01

+0

无需在AppDelegate中声明,在您调用Web服务之前,如果数据不足,您可以从用户默认值检索数据,然后您可以调用新服务,并且如果数据不存在,则可以从用户默认值加载本地数据。 – 2014-09-29 07:21:11

相关问题