2012-02-09 67 views
21

我是一个新手iOS程序员,我有一个问题。如何获得UISwitch的价值?

我目前在iOS核心数据上工作,我的问题是我想通过采用UISwitch的值将数据插入到数据库的布尔属性中。

的问题是,我不知道这是什么我要调用的方法(例如的.text做同样的事情,但对于的UITextField)。我做了一个小的谷歌搜索,但没有结果。下面是一些代码:

[newContact setValue:howMany.text forKey:@"quantity"]; 
[newContact setValue:important.??? forKey:@"important"]; 

的howmany是一个文本框,重要的是UISwitch

回答

17

你有看了看文档的UISwitch?一般来说,当搜索信息时,你应该让文档成为你的第一个调用点,然后转向谷歌,然后再堆栈溢出,如果你真的找不到你想要的。

你想要@property(nonatomic, getter=isOn) BOOL on属性,如:

important.isOn 

如果你还没有拿到核心数据集使用基元则可能需要换行布尔在NSNumber

[NSNumber numberWithBool:important.isOn] 
+3

这应该是重要的还是[重要的是]。 important.isOn将无法工作。 – 2012-02-09 21:25:43

+0

@NickLockwood doc的声明属性为'@property(nonatomic,getter = isOn)BOOL on' – 2012-02-09 21:27:02

+3

@ Paul.s right,但是'isOn'只有在你真正使用它作为方法时才会使用。如果您使用点语法,则使用属性的名称:'on'。 – 2012-02-09 21:31:36

22

要保存它

[newContact setObject:[NSNumber numberWithBool:important.on] forKey:@"important"]; 

检索它

BOOL on = [[newContact objectForKey:@"important"] boolValue]; 
+1

+1用于指出如何再次取回数值。 – 2012-02-09 21:39:16

0
[newContact setBool:[NSNumber numberWithBool:important.on] forKey:@"important"]; 
5

其他海报是正确的,你需要使用ISON方法来获取值,但是它返回一个布尔值,你不能直接传递给setValue:因为该方法预计forKey一个东西。

要设置您的核心数据对象的值,首先把它包在一个NSNumber,像这样:

NSNumber *value = [NSNumber numberWithBool:important.on]; 
[newContact setValue:value forKey:@"important"]; 
+0

把NSNumber数据放入一个布尔属性是正确的?我已根据您的回答更正了我的代码,但保存数据后仍然存在错误。 – Eristikos 2012-02-09 22:02:12

+0

NSNumber是将BOOL作为对象封装的官方方式,因此它应该可以工作。你看到什么错误? – 2012-02-09 22:18:52

+0

另一种选择是使用@property(monatomic,assign)将重要属性声明为核心数据类的BOOL BOOL important;然后使用“@动态重要”;在.m文件中进行合成。然后,您可以直接使用newContact.important = important.on将其设置为BOOL; – 2012-02-09 22:21:57

3

我用

[NSString stringWithFormat:@"%d",(self.allNotificationSwitch.isOn ? 0:1)]; 

而且

[NSString stringWithFormat:@"%@",(self.allNotificationSwitch.isOn ? @"Yes":@"No")];