【问题标题】:Storing & fetching the cached data from JSON webservice in iPhone从 iPhone 中的 JSON Web 服务存储和获取缓存数据
【发布时间】:2012-02-24 00:14:16
【问题描述】:

我希望为新闻创建一个缓存管理器类,它也可以用于其他 iPhone 项目。我的缓存管理器将支持 JSON 数据的缓存,即文本和图像并将其本地存储在 iPhone 中。这背后的主要思想是使应用程序能够访问缓存的数据,从而减少网络活动。

我正在考虑通过以下方式实现这个东西:

  1. Sqlite 数据库,即获取所有数据并存储

  2. 将此数据添加到某个 .plist 文件中

  3. 核心数据

我尝试将此代码用于第二个解决方案:

NSString *plistPath = [self Return_PlistPathCreation]; // Method to creat the JSON file locaally under Documents

    NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];
    [dict setValue:newsArray forKey:@"homenews"]; //newsArray is the array containing objects parsed from the JSON webservice 
     NSLog(@"JSON representation for dictionary is %@",[dict JSONRepresentation]); //it prints perfectly

    [[dict JSONRepresentation] writeToFile:plistPath atomically:YES encoding:NSASCIIStringEncoding error:nil]; //Not not able to write it within the file 

上面的代码有什么问题?

那么,根据应用程序的性能和响应能力,哪一种方式更适合存储缓存数据?虽然我对新想法持开放态度,但除了上述之外还有其他方法吗?

【问题讨论】:

    标签: iphone sqlite ios4 core-data plist


    【解决方案1】:

    最好的、更有能力和最容易实施的解决方案是第三个,Core-Data。如果您想在未来的新功能开发方面获得最通用的应用程序,我的建议是基于此架构范式设计您的应用程序:

    1. 使用托管对象为您要下载的内容定义数据库和核心数据访问。这个数据库不仅是缓存,也是你应用的主要数据。

    2. 基于该核心数据数据库构建您的应用程序,并通过 UIFetchedResultsController 在您可以访问的所有 viewController 中访问数据。基于 fetchedViewController 委托方法实现视图的轻松刷新。

    3. 构建后台函数,独立于应用程序的其余部分,从 Internet 下载内容并将它们存储在 Core-Data 中。视图将自动刷新,无需您作为开发人员付出更多努力。

    希望对你有用

    【讨论】:

    • & 图像怎么样,如何在 Core Data 中写入/存储它们?
    • 我不将图像保存在核心数据中,而是保存在文件系统中。在核心数据中,我只有对文件的引用。如果您有纪律地进行开发,并且每次删除指向图像文件的核心数据对象时都会删除该文件,那么就没有任何复杂的工作要做。顺便说一句,我不使用缓存目录中文件的原始名称以避免重复名称。最终文件名是核心数据对象中的一个字符串。
    • 哦,我忘了告诉你,不要使用 iOS 为你的应用程序提供的默认缓存目录。您将管理文件夹,因此请使用 Documents 文件夹。缓存文件夹用于非永久文件,只要核心数据对象指向它们,您就需要它们存在。
    • 嘿,你必须看到任何关于核心数据的好教程或你想要解释我的东西。因为我是核心数据的新手。谢谢
    【解决方案2】:

    我从斯坦福大学了解到。 CS193p 视频讲座,您几乎不应该在应用程序中使用 SQLite。 Core Data 有点复杂,但如果你的数据有一个复杂的图表会更好。我认为使用属性列表(plist)会更好:)

    注意:我使用 NSUserDefaults 来保存 JSON 数据,以后在不同的类中使用,this 链接中也有缓存方法。

    【讨论】:

    • 还有很多库,正如@wattson12 提到的,比如RestKit
    【解决方案3】:

    与其自己构建这个,因为它是一个非常复杂的问题,为什么不直接使用 RestKit 之类的东西呢?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2023-03-03
      相关资源
      最近更新 更多