【问题标题】: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 更改为新内容后立即执行此操作。但这取决于你。

      【讨论】:

        猜你喜欢
        • 2013-12-18
        • 2017-03-14
        • 1970-01-01
        • 2011-01-14
        • 2015-02-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-21
        • 2011-12-08
        相关资源
        最近更新 更多