保存在 NSUserDefaults 中时 NSInteger 丢失值

NSInteger losing value when saved in NSUserDefaults

执行以下代码时,即使选择的 indexPath.row 是“1”,它也会记录“0”。

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSInteger location = indexPath.row;
[userDefaults setInteger:location forKey:@"savedlocations"];
NSInteger location2 = [userDefaults integerForKey:@"savedlocation"];
NSLog(@"l: %ld", location);

您正在查找密钥 "savedlocation" 而不是 "savedlocations"。

编辑:

0 正在被该方法返回,这是为找不到的 NSInteger 返回的内容。我对奇怪的措辞不好。

您有几个问题需要解决:

  • 您正在使用密钥 savedlocations 保存,但使用 savedlocation 检索它。注意第一个是复数。
  • 您正在记录 location,而不是 location2,这是从 NSUserDefaults 中提取的内容。 location2 将始终为 0,因为以上几点。
  • 编辑: 我在这里有关于调用 synchronize 的第三点,但事实证明这与这种情况无关,正如 rmaddy 在评论中所解释的那样下面。

不过,除了那些快速修复之外,您的配置应该有效。