【问题标题】:iOS Using init to initialize all my valuesiOS 使用 init 初始化我所有的值
【发布时间】:2014-03-18 18:52:43
【问题描述】:

我需要一种方法来仅在第一次安装我的应用程序时初始化大量对象。所以我想我用这个:

    -(id) init {
    self = [super init];

       if(self) {
         NSUserDefaults *myUD = [NSUserDefaults standardUserDefaults];
         [myUD  setObject:@"5" forKey:@"Extra"]; // 5 giving 4 extra diaries
         [myUD  setObject:@"0" forKey:@"CatchingUp"]; // it's a live diary
         [myUD  setObject:@"888" forKey:@"SendingSuccess"];
         [myUD  synchronize];
       }
    return self;
    }

我显然还有很多要初始化的论文,但这只是为了让您了解我做了什么。

为了测试,我从手机中删除了该应用,但未执行初始化。我把它放在 ViewDidLoad 之前。

请问我做错了什么或者有更好的方法吗?

非常感谢您。

【问题讨论】:

  • 你是否像这样调用init 方法:[[MyViewController alloc] init]
  • 我正在做你所看到的

标签: ios initialization init


【解决方案1】:

如果您只想在应用第一次运行时设置一些值,

将此代码放入应用委托中,并在 didFinishLaunchingWithOptions 方法中使用此方法, 或者您可以将此代码放在您的视图控制器中并在 viewDidLoad 方法中使用此方法:)

- (void)setDefaultInfoValue {
      if (![[NSUserDefaults standardUserDefaults] boolForKey:@"everLaunched"]) {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"everLaunched"];
        //put you code here
        NSUserDefaults *myUD = [NSUserDefaults standardUserDefaults];
        [myUD  setObject:@"5" forKey:@"Extra"]; // 5 giving 4 extra diaries
        [myUD  setObject:@"0" forKey:@"CatchingUp"]; // it's a live diary
        [myUD  setObject:@"888" forKey:@"SendingSuccess"];
        [myUD  synchronize];
      }
    }

【讨论】:

  • 谢谢布赖恩。我最终做了你建议的事情,因为我确实需要将值保存到磁盘。它现在工作正常。抱歉,我不能投票给你 :-( 不公平!
  • 很好:) 很高兴能帮到你:)
【解决方案2】:

目前,只要您创建包含代码的类的实例,您的代码就会运行 - 这可能不是您想要的(也不是您所描述的)。

您应该使用registerDefaults: 而不是setObject:forKey:,它仅在值不存在且不将值保存到磁盘时安装指定的值。这可以在应用程序委托中完成,也可以在使用不同用户默认键的每个类中单独完成。

您观察到的直接问题可能是您没有创建包含您的代码的类的实例。

【讨论】:

  • 感谢您的回答 Wain。我不确定我是否理解。让我告诉你我想要什么,也许你告诉我如何得到它。 :-) 我需要一种方法将一些值放在 NSUSerDefaults 中的不同键中。稍后,我将更改它们,但开始时我需要它们,并且我只需要它们一次,当应用程序启动或应用程序被删除并再次运行时,因为如果它们每次运行时它们都会重置我的值应用程序运行。这样做的方法是什么?
  • 我的回答描述了这样做的方式:registerDefaults:
  • 但是我在哪里包含它?在 ViewDidload 中,在 Init 中?
  • 好吧,我要试试,但是我用 NSUSerDefaults 放入的 init 甚至没有运行一次,这就是为什么我觉得它有点奇怪。
  • 您可能没有创建该类的实例(根据@Pavan 上面的评论)
猜你喜欢
  • 2016-09-25
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多