0

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

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

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

4

1 回答 1

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 块)等方法。然后您可以隐藏对象内的所有实现细节。

于 2011-08-21T21:01:18.217 回答