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;
语法问题:
我正在获取和访问用户键入的文本值,如下所示:
在 .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;