如何保存我的iPhone应用程序的用户偏好?

问题的标题几乎把它给了 – 我想我的应用程序要记住一些事情。 这是某种计算器,所以它应该保存上次使用的值和一些用户可select的设置。

基本上我想保存一些浮游物和BOOL,并在下次应用程序加载时重新加载它们。

什么是最好和最简单的方法来做到这一点?

谢谢!!

最简单的方法之一是将其保存在NSUserDefaults

设置:

 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setObject:value forKey:key]; // – setBool:forKey: // – setFloat:forKey: // in your case [userDefaults synchronize]; 

获得:

 [[NSUserDefaults standardUserDefaults] objectForKey:key]; – boolForKey: 

– floatForKey:在你的情况。

除了非常好的NSUserDefaults方法之外,还有一种简单的方法可以将NSArray,NSDictionary或NSData中的数据存储在一个文件中。 你也可以使用这些方法:

 - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag 

分别(为一个NSDictionary):

 + (id)dictionaryWithContentsOfFile:(NSString *)path 

你只需要给一个位置一个有效的path。 根据iOS应用程序编程指南,/ Library / Caches目录将是存储数据的最佳位置,您需要在应用程序启动之间保留这些数据。 (见这里 )

为了在您的文档directoy中存储/加载名为“managers”的字段中的字典,您可以使用以下方法:

 -(void) loadDictionary { //get the documents directory: NSArray *paths = NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask, YES); NSString *cacheDirectory = [paths objectAtIndex:0]; //create a destination file name to write the data : NSString *fullFileName = [NSString stringWithFormat:@"%@/managers", cacheDirectory]; NSDictionary* panelLibraryContent = [NSDictionary dictionaryWithContentsOfFile:fullFileName]; if (panelLibraryContent != nil) { // load was successful do something with the data... } else { // error while loading the file } } -(void) storeDictionary:(NSDictionary*) dictionaryToStore { //get the documents directory: NSArray *paths = NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask, YES); NSString *cacheDirectory = [paths objectAtIndex:0]; //make a file name to write the data to using the //cache directory: NSString *fullFileName = [NSString stringWithFormat:@"%@/managers", cacheDirectory]; if (dictionaryToStore != nil) { [dictionaryToStore writeToFile:fullFileName atomically:YES]; } } 

无论如何,这种方法是非常有限的,如果你想存储更复杂的数据,你必须花费大量额外的工作。 在这种情况下,CoreData API非常方便。

您正在寻找NSUserDefaults

在Swift中:

设置

 let userDefaults = NSUserDefaults.standardUserDefaults() userDefaults.setObject(value, forKey: key) // userDefaults.setFloat(12.34, forKey: "myFloatKey") // userDefaults.setBool(true, forKey: "myBoolKey") 

请注意,对于iOS 8和更高版本, 不build议调用userDefaults.synchronize()

入门

 let userDefaults = NSUserDefaults.standardUserDefaults() if let value = userDefaults.objectForKey(key) { print(value) } 

请注意, userDefaults.boolForKeyuserDefaults.floatForKey都返回非可选值,所以它们永远不会是nil (仅为false0.0 )。

进一步阅读

  • NSUserDefaults – 一个Swift简介