【问题标题】:IOS/Objective C: Access BOOL propertyIOS/目标 C:访问 BOOL 属性
【发布时间】:2015-05-31 03:15:12
【问题描述】:

语法问题:

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

在.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;

在我的数据模型中,如果这有影响的话。

感谢您提供正确的语法。

【问题讨论】:

  • BOOL 是原始类型。您不希望在属性声明或任何其他 BOOL 变量声明中使用星号。

标签: ios objective-c properties boolean


【解决方案1】:

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

@property (nonatomic, assign) BOOL pub;

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

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

self.pub = switchControl.on;

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

@property (nonatomic, strong) NSNumber *pub;

managedObject.pub = @(switchControl.on);

【讨论】:

  • 我使用后缀字段是因为所有这些都是进入字段的值,即核心数据中的属性。意识到 IOS 术语与数据库术语不同,但最终核心数据确实会进入与服务器上的数据库同步的数据库。原始类型是否足以处理来自开关的值,即 ON 还是我应该使用对象?
  • 合适。然而,Xcode 会自动生成 NSNumber 的对象。我将编辑我的答案以显示这是如何完成的。
  • 我正在使用键值存储在 dbase 中,即 [record setValue:pub forKey:@"pub"];如何将 pub 设置为等于 switch 中的值以便正确保存?
  • 同上,值为@(switch.on)
  • 调用UISwitch pub 字段并不令人困惑。在大多数编码标准中,实际上不赞成在变量名中添加“类型”。 switch 绝对是一个非常糟糕的名字,因为它是一个关键字。在所有其他方面,我更喜欢这个答案,而不是解释非常混乱的公认答案。
【解决方案2】:

对于任何阅读本文的人,我让它按如下方式工作:

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

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

.on 和 .isON 之间的区别在于,第二个表示它实际上是真的,而第一个只是它的值为真或假。因此,要测试它是否为真,是的,1,on 等,您检查 .isOn。

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

在.h文件中使用:

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

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

在.m文件中使用:

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

最后,您可以在模型中为实体中的 pub 属性赋予“布尔”类型,数据模型实体的 nsobject 的属性应该是 NSNumber

@property (nonatomic, strong) NSNumber *pub;

【讨论】:

    猜你喜欢
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多