2011-08-21 88 views
0

我正在开发一个应用程序,其中用户输入搜索词并从Web服务(我控制Web服务)接收结果。结果显示在可用视图上,然后用户可以选择一行并导航到3-4层内部细节(我正在使用uinavigation控件)。在视图之间保留数据

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

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

+0

你存储了多少数据类型的数据?看起来plist文件可能是一个很好的方法(你没有真正给出排除它的理由)。您也可以直接将数据存储到驱动器,也许在缓存文件夹中。 –

+0

这是一个对象数组。它从25个结果开始,但用户可以加载更多(如果他点击“加载25个以上”,数据以JSON格式从Web服务器传递,我想到了p-list解决方案,但没有找到如何去做。 ..我必须在网络服务器上准备数据(并且不知道如何......),并且我也不知道如何保存p列表,我有这个问题吗?你有没有这方面的参考?考虑到NSArray将包含的少量数据,我的应用程序代理解决方案会有问题吗?非常感谢您! – Yaniv

+0

我在答案中包含了plist示例,但取决于您将允许多少个25组用户存储(并且如果你在某个点之后清除未使用的组),那么做一个集中​​的解决方案并不坏。就我个人而言,我更喜欢为这些目的创建一个单例对象,保留AppDelegate用于委托。 –

回答

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

+0

非常感谢!我会尝试。你知道我怎么能在服务器端装箱这样的二进制p列表(使用c#?) – Yaniv

+0

我确定有可用的库,但我没有意识到任何(我没有做过c#编码上个世纪,如果我记得) –