在视图之间保留数据

时间:2011-08-21 19:39:39

标签: core-data uinavigationcontroller persist

我正在开发一个应用程序,用户在其中输入搜索词并从Web服务接收结果(我控制Web服务)。结果显示在一个合适的视图上,然后用户可以选择一行并导航到三 - 四级内部细节(我正在使用uinavigation控件)。

我想知道在视图之间保留数据的最佳方法是什么。

我目前正在使用应用程序委托存储一组对象,我可以从应用程序的任何位置访问这些对象。它工作正常,但我读到这对工作来说不是一个好习惯(我担心内存问题)。我尝试使用Core Data框架来完成这项工作,但我意识到我必须阅读我的Web服务结果,然后逐个循环它们以便将它们插入到数据库中。我还必须删除旧数据,因为我保存的数据仅适用于当前搜索。我读了关于p列表并将数据保存到文件系统但是找不到真正好的解决方案... 任何帮助将不胜感激!!!感谢!!!

1 个答案:

答案 0 :(得分:0)

你可以使用JSON或PLISt进行通信,虽然二进制plist是 - 根据苹果 - 在手机端更快。

从二进制Plist创建字典相对简单:

NSPropertyListFormat format;
NSDictionary *myDictionary = [NSPropertyListSerialization 
        propertyListFromData:data mutabilityOption:NSPropertyListMutableContainers
        format:&format errorDescription:&errorString];

从JSON创建它只需要使用一个现成的JSON库。收到字典后,保存:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                     NSUserDomainMask, YES); 
NSString *file = [NSString stringWithFormat: @"%@%@.plist", [paths objectAtIndex:0], @"MyPlistBaseName"];    

[plist writeToFile: file atomically:NO];

稍后重新加载:

NSDictionary *plist = [[[NSDictionary alloc] initWithContentsOfFile: file] autorelease];

但是,如果您以单例形式封装对此数据的访问权限,那么如果速度/内存成为问题,您可以担心优化实施。只需将signleton视为数据的“所有者”,使用countgetGroup(0)等方法(返回25块)等等。然后,您可以隐藏对象内的所有实现细节。