在模拟器上卸载应用程序后,NSUserDefaults未清除

Rez*_*our 93 nsuserdefaults ios ios-simulator xcode6 ios8

这可能听起来真的NOOB!我想检查是否是用户第二次进入我的应用程序,以便保持我正在使用的运行计数NSUserDefaults.我在我rootViewControllerviewDidLoad方法中实现了以下代码:

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    NSLog(@"hello %ld", (long)[userDefaults integerForKey:@"runCount"]);

    if ([userDefaults integerForKey:@"runCount"] != 1) {
        //not the 2nd run
        [userDefaults setInteger:1 forKey:@"runCount"];
        NSLog(@"not 2nd run");
    } else {
        //second run or more
        NSLog(@"2nd run");
    }

    [userDefaults synchronize];
Run Code Online (Sandbox Code Playgroud)

一切正常,但问题是当我卸载(删除并重新安装)应用程序时,根据此处此处的数据应该被清除,但它不是,并且在重新安装应用程序之前,以前的数据仍然显示.我在iOS模拟器上使用xCode6-beta运行我的应用程序,并在iOS 8上定位应用程序

and*_*ers 167

我认为这是由于iOS8 Beta模拟器中的一个错误.

预期的行为是,当删除应用程序时,该应用程序的NSUserDefaults也会被删除.

  • 但是,从模拟器中删除应用程序时,不会删除NSUserDefaults .
  • 从运行iOS8的物理设备中删除它们时,它们会被正确删除.

一个快速而烦人的解决方案是点击iOS模拟器 - >重置内容和设置.

带模拟器10的Xcode 9.2仍然存在这个问题.菜单选项现在是硬件..删除所有内容和设置

我提交了一个错误报告btw

  • 在iOS 8 GM上测试它并且该bug仍然存在.很烦人. (44认同)
  • 在XCode 6.0.1模拟器中确认+1 (4认同)
  • 对于任何面临同样问题的人。如果您在同一组下有 1 个以上的应用程序并且所有应用程序都在使用应用程序组(在功能下打开),那么您必须从设备中删除所有应用程序,以便清除用户默认设置。由于用户默认值是共享的,即使设备上有一个应用程序,它也不会被删除,因为该应用程序将使用用户默认值。 (2认同)

Flu*_*imp 14

由于重置内容和设置是核选项,因此您可以考虑另外两个选项,直到解决iOS 8/Xcode 6 GM模拟器上的错误:

  1. 您可以手动删除NSUserDefaults存储的plist文件.这个目前位于在~/Library/Developer/CoreSimulator/Devices/*some_device_id*/Library/Preferences/com.yourcompany.yourapp.plist UUID目录名称中找到合适的模拟器有点繁琐.编辑:2014-10-28 20-34-52正确路径: ~/Library/Developer/CoreSimulator/Devices/*some_device_id*/data/Library/Preferences/com.yourcompany.yourapp.plist

  2. 您可以使用plistbuddy例如在该plist上执行"手术"(可能使用运行脚本构建阶段)

/usr/libexec/plistbuddy -c "Set :BSDidMoveSqliteDb 0" path_to_plist


Ank*_*ava 5

对于任何面临同样问题的人。

如果您在同一组下有 1 个以上的应用程序并且所有应用程序都在使用应用程序组(在功能下打开),那么您必须从设备中删除所有应用程序,以便清除用户默认设置。

由于用户默认值是共享的,即使设备上有一个应用程序,它也不会被删除,因为该应用程序将使用用户默认值。