【问题标题】:How to store BOOL in NSUserDefaults [duplicate]如何在 NSUserDefaults 中存储 BOOL [重复]
【发布时间】:2015-03-16 10:38:12
【问题描述】:

视图和视图控制器是分开的。我已经尝试过NSUserDefaults 它不起作用。

[[NSUserDefaults standardUserDefaults] setValue:BOOLCondition forKey:@"YES"];
[[NSUserDefaults standardUserDefaults] synchronize];

据说 arc 不允许将 bool 转换为 id

如何传递该布尔值

***** 视图到视图控制器而不是视图控制器到视图控制器

【问题讨论】:

  • 阅读标题,在我看来,您想将值从视图控制器传递给视图。在问题中,您说“查看视图控制器”。是哪个?
  • 在提问之前您是否尝试过用谷歌搜索错误?此外,您的问题/代码与视图/视图控制器无关。

标签: ios objective-c iphone xcode uiviewcontroller


【解决方案1】:

使用下面的代码将BOOL值存储在NSUserDefaults

BOOL BOOLCondition = YES;BOOL BOOLCondition = NO;

[[NSUserDefaults standardUserDefaults] setBool:BOOLCondition forKey:@"YES"];
[[NSUserDefaults standardUserDefaults] synchronize];

【讨论】:

  • 那个键名很可疑。看起来键和值颠倒了(即BOOLCondition实际上是键)...
【解决方案2】:

我总是这样做来存储 BOOL 值,因为我更喜欢直接处理对象:

BOOL _myBool = TRUE; // or FALSE...
[[NSUserDefaults standardUserDefaults] setValue:@(_myBool) forKey:@"boolValue"];
[[NSUserDefaults standardUserDefaults] synchronize];

并恢复存储的值:

BOOL _boolValue = [[[NSUserDefaults standardUserDefaults] valueForKey:@"boolValue"] boolValue]; // will be FALSE if the value is `nil` for the key

【讨论】:

  • BOOL 按照惯例,Objective-C 中的值是 YESNO
  • 其实我也可以用数字0代表false或数字1代表true;这将是相同的结果——因为这些是 Obj-C 中的默认值;不过,我也可以为 true 使用任何非零值,它也可以正常工作。 :)
  • 但约定是使用YESNO
  • 是的,它们也可以;我根本没有否认这个约定! :) 我们都知道,在运行时它们几乎是0 和非零(主要是1)值,它们存储在unsigned char 上——TRUEFALSE 值被定义为相同作为YESNO,幸运的是不会有任何干扰交换它们。 ;)
  • @(YES)@(TRUE)返回的对象有区别吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 2012-04-15
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
相关资源
最近更新 更多