Как получить значение UIswitch?

Я начинающий программист iOS, и у меня возникла проблема.

В настоящее время я работаю над базовыми данными iOS, и моя проблема заключается в том, что я хочу вставить данные в логический атрибут в базу данных, взяв значение UISwitch.

Проблема в том, что я не знаю, какой метод мне нужно вызвать (например, .text делает то же самое, но для UITextField). Я сделал небольшой поиск в Google, но безрезультатно. Вот код:

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

сколько это текстовое поле, важно UIswitch


person Eristikos    schedule 09.02.2012    source источник


Ответы (4)


Чтобы сохранить это

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

Чтобы получить его

BOOL on = [[newContact objectForKey:@"important"] boolValue];
person Joel Kravets    schedule 09.02.2012

Вы смотрели документы для UISwitch? Как правило, вы должны сделать документы своей первой точкой вызова при поиске информации, затем обратиться к Google, а затем к переполнению стека, если вы действительно не можете найти то, что вам нужно.

Вам нужно свойство @property(nonatomic, getter=isOn) BOOL on, например:

important.isOn

Если у вас нет набора Core Data для использования примитивов, вам, возможно, придется обернуть это логическое значение в NSNumber:

[NSNumber numberWithBool:important.isOn]
person Paul.s    schedule 09.02.2012
comment
Это должно быть важно. на или [важно на]. Important.isOn не будет работать. - person Nick Lockwood; 10.02.2012
comment
@NickLockwood Документ объявляет свойство как @property(nonatomic, getter=isOn) BOOL on - person Paul.s; 10.02.2012
comment
@ Пол, верно, но isOn используется только тогда, когда вы действительно используете его как метод. Если вы используете точечный синтаксис, вы используете имя свойства: on. - person Dave DeLong; 10.02.2012
comment
Да, поэтому свойство включено, а метод получения isOn. Чтобы получить к нему доступ, используя синтаксис точки свойства, используйте on. Чтобы получить к нему доступ, используя синтаксис метода, используйте isOn - попробуйте и вернитесь ко мне ;-) - person Nick Lockwood; 10.02.2012
comment
@NickLockwood Я только что попробовал NSLog(@"%d %d %d ", thing.isOn, [thing isOn], thing.on);, и все они эквивалентны. - person Paul.s; 10.02.2012
comment
Ха, это странно. Может быть, это просто [важно дальше], что тогда не работает. Моя ошибка. (+1 для вас) - person Nick Lockwood; 10.02.2012
comment
@DaveDeLong @NickLockwood Я в замешательстве, потому что думал, что thing.on за кулисами превратится в [thing on]. thing.on работает, но [thing on] выдает NSInvalidArgumentException??? - person Paul.s; 10.02.2012
comment
Да, это ожидаемо, потому что метод получения определен как isOn, поэтому нет метода on. Довольно странно, что .isOn меняется на [... isOn] - я не знаю, ошибка это или особенность, но я думаю, что вы можете вызывать другие методы, которые не определены как свойства, используя точечный синтаксис, так что есть нет причин, по которым это не сработает. (Например, я постоянно вижу людей, использующих array.count). - person Nick Lockwood; 10.02.2012

Другие плакаты правы в том, что вам нужно использовать метод isOn для получения значения, однако это возвращает значение BOOL, которое вы не можете передать непосредственно в setValue: forKey, потому что этот метод ожидает объект.

Чтобы установить значение для вашего основного объекта данных, сначала оберните его в NSNumber, например:

NSNumber *value = [NSNumber numberWithBool:important.on];
[newContact setValue:value forKey:@"important"];
person Nick Lockwood    schedule 09.02.2012
comment
Правильно ли помещать данные NSNumber в логический атрибут? Я исправил свой код на основе вашего ответа, но ошибка все еще остается после сохранения данных. - person Eristikos; 10.02.2012
comment
NSNumber — это официальный способ обернуть BOOL как объект, поэтому он должен работать. Какую ошибку вы видите? - person Nick Lockwood; 10.02.2012
comment
Другой вариант — объявить важное свойство как BOOL в вашем основном классе данных, используя @property(monatomic, assign) BOOL Important; а затем используйте @dynamic Important; в файле .m, чтобы синтезировать его. Затем вы можете просто установить его непосредственно как BOOL, используя newContact.important = Important.on; - person Nick Lockwood; 10.02.2012

я использовал

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

А также

[NSString stringWithFormat:@"%@",(self.allNotificationSwitch.isOn ? @"Yes":@"No")];
person Avijit Nagare    schedule 28.09.2015