iPhone - 如何从应用程序中保存用户设置?

时间:2009-04-25 17:56:14

标签: iphone objective-c cocoa-touch

在长期记忆中保存iPhone应用程序中的几个变量的最简单方法是什么?

我有一个适用于不同sqlite数据库的应用程序,我希望在退出应用程序后保存最后一个活动数据库名称,以便在用户再次进入应用程序时打开最后一个数据库。

为此目的创建一个特殊的数据库并将这些值存储在其中有点不方便,因为我只有几个要存储的变量。

存储这些变量的最简单方法是什么?

提前谢谢。

2 个答案:

答案 0 :(得分:16)

NSUserDefaults是这样设置的最佳位置。

答案 1 :(得分:6)

在我的头文件中,我可能会添加以下内容:

@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会创建一个新的NSUserDefaults字典,其中包含您在kDefaultDatabaseName中设置为默认数据库的任何内容。

当应用程序完成启动时,成员databaseName将获取NSUserDefaults字典中设置的值。这可以是kDefaultDatabaseName或运行应用程序后更新的内容。

在运行应用程序时,您的用户可能会将databaseName的值更改为其他内容。

在应用程序终止之前,databaseName的值将写入NSUserDefaults字典。下次打开应用程序时,databaseName将采用新的更新值。

在将此更新写入字典之前,您不必等待应用程序终止。例如,您可以在用户将databaseName更改为新内容后立即执行此操作。但这取决于你。