Core data 在视图之间持久化数据

Core data 在视图之间持久化数据,core-data,uinavigationcontroller,persist,Core Data,Uinavigationcontroller,Persist,我正在开发一个应用程序,用户在其中输入搜索词并从我控制的web服务接收结果。结果显示在uitable视图上,然后用户可以选择一行并导航到我正在使用uinavigation控件的三到四级内部详细信息 我想知道在视图之间保存数据的最佳方法是什么 我目前正在使用应用程序委托存储一组对象,我可以从应用程序中的任何地方访问这些对象。它工作得很好,但我读到这不是一个很好的做法,因为我担心的是记忆问题。我尝试使用核心数据框架来完成这项工作,但后来我意识到,我必须读取我的web服务结果,并逐一循环,以便将它们插

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

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

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

您可以使用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、getGroup0等方法返回一个25的块等。然后您就可以将所有实现细节隐藏在对象中。

您存储了多少类型的数据?看起来plist文件可能是一个很好的方法,但您并没有给出排除它的理由。您也可以直接将数据存储到驱动器中,可能存储在缓存文件夹中,它是一个对象数组。它从25个结果开始,但如果用户点击load 25 more,则可以加载更多。数据以JSON格式从web服务器传递。我考虑过p-list解决方案,但没有找到如何做到这一点。。。我必须在web服务器上准备数据,但不知道如何。。而且我也不知道一旦我有了p-list该如何保存它。你有这样做的参考资料吗??考虑到NSArray将包含的数据量很小,我的应用程序委派解决方案会有问题吗?非常感谢你!!!我在回答中包括了plist示例,但这取决于您允许用户存储的25个组的数量,并且如果您在某个时间点之后清除了未使用的组,那么使用集中式解决方案也不错。就我个人而言,我更喜欢为这些目的创建一个单例对象,将AppDelegate保留为委托内容。我认为它不会超过150-200条记录。你认为应用程序委托/单例解决方案适合这种情况吗?请参阅我答案底部的编辑。基本上,如果不了解更多的应用程序,如果没有更多的细节,这是一个非常困难的决定,但请记住-过早优化通常不是一件好事。非常感谢!!!我试试看。你知道我如何用c在服务器端包装这样一个二进制p-list吗?我肯定有可用的库,但我不知道有任何库,如果我记得的话,我从上个世纪就没有做过c编码