如何保存我的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.boolForKey
和userDefaults.floatForKey
都返回非可选值,所以它们永远不会是nil
(仅为false
或0.0
)。
进一步阅读
- NSUserDefaults – 一个Swift简介
Swift 4 / Linux
显然有一些变化。 现在有UserDefault
类。 检查这些链接:
https://developer.apple.com/documentation/foundation/userdefaults
https://www.hackingwithswift.com/read/12/2/reading-and-writing-basics-userdefaults