我想在我的应用中的不同位置存储数据,该应用可以访问应用中的对象。类似于php或全局变量中的会话。我知道我可以使用NSUserDefaults,但我不确定如何继续为它添加值然后访问它。例如,首先我要存储登录期间使用的用户名,然后在第3个屏幕上,我想保存他从公司列表中选择的用户的公司。然后在第5个屏幕上,我想保存用户选择的位置。然后我有不同的功能,用户可以根据他的选择使用。因为我是一个新手,我很抱歉,如果这是一个愚蠢的问题,但任何人都可以帮助我如何存储和检索可在整个应用程序访问的多个数据。
答案 0 :(得分:5)
在iOS设备上,您可以使用各种存储数据的选项。以下是您可能会考虑的一些问题:
核心数据以及SQL数据存储库或XML存储库。这基本上是Apple的设备数据库框架库,可供所有应用程序使用。它不是最简单的选项,但它允许您存储相当大量的各种数据,这些数据将在整个应用程序代码中提供。此外,只要在应用关闭之前将数据保存到持久数据存储,数据就会在应用启动之间保留。
财产清单。属性列表比Core Data更轻量级,您可能会发现它们更容易使用。它们允许将基本键值对存储和检索到持久属性列表文件中。因此,只要在应用关闭之前将数据存储到属性列表文件中,您还可以获得应用启动之间数据保留的优势。
将数据存储到文本文件中。我不确定这是否比财产清单有任何优势。
用户默认值。我不确定您是否可以在应用程序使用期间轻松添加新类型的数据。这更多地用于提供默认应用程序设置的集合,然后允许用户在应用程序使用期间对其进行个性化设置。
内存中的单例对象。这可能是一个选项,当然,一旦应用程序关闭,所有数据都会消失,除非它以某种方式持续存储到永久数据存储中。
我确信除了这些之外还有其他选择。我将有兴趣阅读它们。我希望这会有所帮助。
答案 1 :(得分:2)
您在评论中告诉我在属性列表中提供代码段。当然。没问题。您需要做的第一件事是创建属性列表文件。只需将属性列表类型的文件添加到项目中即可。我们称之为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"]];
答案 2 :(得分:0)
创建一个单例对象。我知道这不是一个非常好的模式,但它是你问题的最简单的解决方案。