代码之家  ›  专栏  ›  技术社区  ›  sbs

NSUserDefaults standardUserDefaults是如何工作的?

  •  1
  • sbs  · 技术社区  · 15 年前

    我有个问题 [NSUserDefaults standardUserDefaults] 在iOS4.0中。

    我通过使用 [[NSUserDefaults standardUserDefaults] setObject:self.listData forKey:@"listData"]; 在里面 applicationDidEnterBackground: applicationWillTerminate: 方法。我用 NSMutableArray *listData = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] arrayForKey:@"listData"]]; viewDidLoad 方法。

    然后我选择属性 应用程序不在后台运行 在info.plist中查看它是否在iOS3.0中工作。当我点击home按钮时,它调用了save方法,然后我进入应用程序,数据已经成功保存。

    所以我想知道 [NSUserDefaults标准用户默认值] 在iOS4.0中工作?我怎么可能在iOS4.0中使用它来保存一些数据呢?太多了!

    2 回复  |  直到 12 年前
        1
  •  2
  •   fogelbaby    15 年前

    更具体地说- [NSUserDefaults standardUserDefaults] 是指向闪存中默认文件的副本的指针,而不是默认文件本身。进行更改时,仅修改此临时副本。只有当 [NSUserDefaults synchronize] 接到电话。程序退出时应该调用此函数。

    实际上,你的程序可能运行良好。真正的问题是,从多任务条中删除应用程序并不会调用所有的应用程序退出函数,它只是删除进程,很像OSX中的Force Quit(可能与Force Quit完全一样)。

    applicationWillTerminate 然后[NSUserDefaults synchronize]在正常退出过程中被调用。

    如果希望首选项在用户启动的强制退出后仍然有效,则应在更改时写入默认值,并将同步调用放入 applicationDidEnterBackground

        2
  •  2
  •   gurghet    15 年前

    别那么做。我的意思是不要在去bg之前就保存预选项,因为它什么都不做。事实上你应该看看说明书。nsuserdefaults在两种不同情况下保存首选项:

    1. 每一个确定的(不知道?)时间量
    2. 调用[NSUserDefaults synchronize]时

    如果您在前往bg的途中保存了首选项,则以上任何一项都不适用,因此不会保存首选项。

    推荐文章