在iPhone中保存会话数据

在iPhone中保存会话数据,iphone,xcode,ios4,nsuserdefaults,Iphone,Xcode,Ios4,Nsuserdefaults,我想在我的应用程序中的不同点存储数据,这些数据可供整个应用程序中的对象访问。类似于php中的会话或全局变量。我知道我可以使用NSUserDefaults,但我不确定如何继续向它添加值,然后访问它。例如,首先我想存储登录期间使用的用户名,然后在第三个屏幕上,我想保存用户从公司列表中选择的公司。然后在第五个屏幕上,我想保存用户选择的位置。然后我有不同的功能,用户可以根据他的选择使用。作为一名新手,如果这是一个愚蠢的问题,我很抱歉,但有人能帮助我如何存储和检索整个应用程序中可访问的多个数据。创建一个单

我想在我的应用程序中的不同点存储数据,这些数据可供整个应用程序中的对象访问。类似于php中的会话或全局变量。我知道我可以使用NSUserDefaults,但我不确定如何继续向它添加值,然后访问它。例如,首先我想存储登录期间使用的用户名,然后在第三个屏幕上,我想保存用户从公司列表中选择的公司。然后在第五个屏幕上,我想保存用户选择的位置。然后我有不同的功能,用户可以根据他的选择使用。作为一名新手,如果这是一个愚蠢的问题,我很抱歉,但有人能帮助我如何存储和检索整个应用程序中可访问的多个数据。

创建一个单例对象。我知道这不是一个很好的模式,但它是解决您问题的最简单的方法。

在iOS设备上,您有各种存储数据的选项。以下是一些您可以考虑的:

  • 核心数据和SQL数据存储库或XML存储库。这基本上是苹果的设备数据库框架库,可供所有应用程序使用。这不是最简单的选择,但它将允许您存储相当大数量的不同数据,这些数据将在整个应用程序代码中可用。此外,只要在应用程序关闭之前将数据保存到持久数据存储中,数据就会在应用程序启动之间保留

  • 属性列表。属性列表比核心数据更轻量级,您可能会发现它们更易于使用。它们允许将基本键值对存储和检索到持久属性列表文件中。因此,只要在应用程序关闭之前将数据存储到属性列表文件中,您还可以在应用程序启动之间保留数据

  • 将数据存储到文本文件中。我不确定这是否比财产清单有任何优势

  • 用户默认值。我不确定你是否能在应用程序使用期间如此轻松地添加新类型的数据。这主要用于提供默认应用程序设置的集合,然后允许用户在应用程序使用期间对其进行个性化设置

  • 内存中的单例对象。这可能是一种选择,但是,当然,一旦应用程序关闭,所有数据都会消失,除非以某种方式持久化到永久数据存储中


  • 我相信除此之外还有其他选择。我有兴趣了解他们。我希望这能有所帮助。

    您在评论中要求我在属性列表中提供代码片段。当然没问题。您需要做的第一件事是创建属性列表文件。只需将属性列表类型的文件添加到项目中。我们称之为DataPoints.plist。在本例中,该文件将包含NSString类型的键值项。在代码示例中,我只是提取属性列表条目并加载一个数组。现在,可以对数组执行任何操作。使用它来加载表视图或其他内容。希望这有帮助。如果有,请您将其标记为已接受的答案。谢谢

    NSString *errorDesc;
    NSPropertyListFormat format;
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"DataPoints" ofType:@"plist"];
    
    NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];
    
    NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization
                                         propertyListFromData:plistXML
                                 mutabilityOption:NSPropertyListMutableContainersAndLeaves
                                 format:&format
                                 errorDescription:&errorDesc];
    
    if (!temp) {
         // Handle Error
         Log(@"Error reading plist: %@, format: %d", errorDesc, format);
    }
    
    NSArray *dataPoints = [NSArray arrayWithArray:[temp objectForKey:@"DataPoints"]];
    

    非常感谢您的回复。我想我应该使用你上面评论中的财产清单。此外,我不需要在应用程序启动时获取数据,因为这是动态的,是用户在启动应用程序时选择的。所以每次都不一样。您还可以告诉我如何创建一个属性列表文件,以及如何从中保存和检索数据。我提供了一个属性列表的代码示例。尽管如此,我还是要补充一点,听起来您不需要在应用程序启动之间保存数据。在这种情况下,如果数据不是要消耗大量内存,那么您可以考虑使用内存中的单线程对象,如Joris建议的那样。如果是数据堆,那么为了释放一些内存,您可能希望使用一些将数据转储到持久存储的东西,例如属性列表或核心数据。