【问题标题】:iPhone - how to save user settings from application?iPhone - 如何从应用程序中保存用户设置?
【发布时间】:2009-04-25 17:56:14
【问题描述】:
将 iPhone 应用程序中的几个变量保存在长期内存中的最简单方法是什么?
我有一个与不同 sqlite 数据库一起使用的应用程序,我希望在退出应用程序后保存最后一个活动数据库名称,以便在用户再次进入应用程序时打开最后一个数据库。
为此创建一个特殊的数据库并将这些值存储在其中有点不方便,因为我只有几个变量要存储。
存储这些变量的最简单方法是什么?
提前谢谢你。
【问题讨论】:
标签:
iphone
objective-c
cocoa-touch
【解决方案1】:
NSUserDefaults 是进行此类设置的最佳位置。
【解决方案2】:
在我的头文件中,我可能会添加以下内容:
@interface myAppDelegate : NSObject <UIApplicationDelegate> {
...
NSString *databaseName;
}
extern NSString * const kDefaultDatabaseName;
extern NSString * const kAppDatabaseNameKey;
在我的实现文件中,我会添加以下内容:
NSString * const kDefaultDatabaseName = @"myDefaultDatabaseName";
NSString * const kAppDatabaseNameKey = @"kAppDatabaseNameKey";
@implementation myAppDelegate
+ (void) initialize {
if ([self class] == [MyAppDelegate class]) {
UIApplication* myApp = [UIApplication sharedApplication];
NSString *defaultDatabaseName = kDefaultDatabaseName;
NSMutableDictionary *resourceDict = [NSMutableDictionary dictionary];
[resourceDict setObject:defaultDatabaseName forKey:kAppDatabaseNameKey];
}
}
- (void) applicationDidFinishLaunching:(UIApplication *)application {
...
databaseName = [[NSUserDefaults standardUserDefaults] stringForKey: kAppDatabaseNameKey];
}
...
- (void) applicationWillTerminate:(UIApplication *)application {
...
[[NSUserDefaults standardUserDefaults] setObject:databaseName forKey:kAppDatabaseNameKey]
}
当您的应用程序启动时,如果没有预先存在的用户默认值,+initialize 将使用您在kDefaultDatabaseName 中设置为默认数据库的任何内容创建一个新的NSUserDefaults 字典。
当应用程序完成启动时,成员databaseName 采用NSUserDefaults 字典中设置的值。这可以是 kDefaultDatabaseName 或在运行您的应用程序后更新的任何内容。
当您运行应用程序时,您的用户可能会将 databaseName 的值更改为其他值。
就在应用程序终止之前,databaseName 的值被写入NSUserDefaults 字典。下次打开应用程序时,databaseName 将采用新的更新值。
在将此更新写入字典之前,您不必等待应用程序终止。例如,您可以在用户将databaseName 更改为新内容后立即执行此操作。但这取决于你。