IOS/Objective C: 访问 BOOL 属性

IOS/Objective C: Access BOOL property

语法问题:

我正在获取和访问用户键入的文本值,如下所示:

在 .h 文件中

@property (strong, nonatomic) IBOutlet UITextField *textField;

(连接到文本框)

在 .m 文件中

NSString *name = self.textField.text;

如何对从开关获得的布尔值做同样的事情?

在 .h 文件中我有:

@property (strong, nonatomic) IBOutlet UISwitch *pubField;

在 .m 文件中我收到一个错误

BOOL *pub = self.pubField.text;

因为 .text 不是布尔值或 UI 开关的有效属性

请注意,我正在使用

@property (nonatomic, assign) BOOL * pub;

在我的数据模型中是否有所作为。

感谢您提供正确的语法。

您正在使用指向原语的指针。这几乎没有必要或不可取。正确的声明是:

@property (nonatomic, assign) BOOL pub;

您问题中的以下行是错误的:BOOL *pub = self.pubField.text;。您应该分配 BOOL 而不是指向它的指针(*pub 表示 "pointer to pub" 用于对象,而不是基元)。第二个 UISwitch 没有 属性 text。命名一个 UISwitch "pubField" 是令人困惑的。

这就是从开关中获取布尔值的方式(基于上述声明):

self.pub = switchControl.on;

在 Core Data 的上下文中,您可能希望使用普通的 Core Data 约定将所有布尔值设为 NSNumber

@property (nonatomic, strong) NSNumber *pub;

managedObject.pub = @(switchControl.on);

对于任何读到这篇文章的人,我让它按如下方式工作:

首先,您应该将数据模型文件中所谓的布尔字段视为一个NSNumber。布尔值只是他们给它起的别名。在幕后,它只是一个 NSNumber。

控件是一个开关,你想要表示值为True的开关的属性是.isOn,但是你需要使用numberWithBool转换.isOn值来得到你需要的NSNumber存储在数据库中。

.on 和.isON 之间的区别在于,第二个表示它实际上是 true,而第一个只是它具有 true 或 false 的值。所以要测试它是否为真,yes,1,on 等等,你检查 .isOn.

所以我的问题的答案如下:

在.h文件中使用:

@属性(弱,非原子)IBOutlet UISwitch *pubField;

连接到开关控制。与我写的问题唯一的区别是弱与强。

在 .m 文件中使用:

NSNumber *pub = [NSNumber numberWithBool:self.pubField.isOn];

最后,您可以在模型中为实体中的 pub 属性赋予类型 "boolean",数据模型实体的 nsobject 的 属性 应该是一个 NSNumber

@属性(非原子,强)NSNumber *pub;