我正在开发一个应用程序,用户在其中输入搜索词并从Web服务接收结果(我控制Web服务)。结果显示在一个合适的视图上,然后用户可以选择一行并导航到三 - 四级内部细节(我正在使用uinavigation控件)。
我想知道在视图之间保留数据的最佳方法是什么。
我目前正在使用应用程序委托存储一组对象,我可以从应用程序的任何位置访问这些对象。它工作正常,但我读到这对工作来说不是一个好习惯(我担心内存问题)。我尝试使用Core Data框架来完成这项工作,但我意识到我必须阅读我的Web服务结果,然后逐个循环它们以便将它们插入到数据库中。我还必须删除旧数据,因为我保存的数据仅适用于当前搜索。我读了关于p列表并将数据保存到文件系统但是找不到真正好的解决方案... 任何帮助将不胜感激!!!感谢!!!
答案 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视为数据的“所有者”,使用count
,getGroup(0)
等方法(返回25块)等等。然后,您可以隐藏对象内的所有实现细节。