IOS / Objective C:访问BOOL属性

时间:2015-03-26 22:04:48

标签: ios objective-c properties boolean

语法问题:

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

<。>文件中的

@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;

as .text不是布尔值或UI切换的有效属性

值得注意的是,我正在使用

@property (nonatomic, assign) BOOL * pub;

在我的数据模型中,如果有所作为。

感谢您提供正确的语法。

2 个答案:

答案 0 :(得分:2)

您正在使用指向基元的指针。这几乎是不必要或不可取的。适当的声明是:

@property (nonatomic, assign) BOOL pub;

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

这是你从交换机获得bool的方法(基于上述声明):

self.pub = switchControl.on;

在核心数据的上下文中,您可能希望使用普通的核心数据约定将所有布尔值都设为NSNumber

@property (nonatomic, strong) NSNumber *pub;

managedObject.pub = @(switchControl.on);

答案 1 :(得分:-1)

对于读这篇文章的人,我按照以下方式工作:

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

控件是一个开关,并且要指示值为True的开关的属性是.isOn但是您需要使用numberWithBool转换.isOn值以获取需要存储在数据库中的NSNumber。

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

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

<。>在.h文件中使用:

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

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

<。>在.m文件中使用:

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

最后,您可以在实体中为pub属性提供模型中的“boolean”类型,数据模型实体的nsobject的属性应该是NSNumber

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