2012-02-09 17 views
21

Jestem początkującym programistą iOS i mam problem.Jak uzyskać wartość UISwitch?

Obecnie pracuję nad Core Data iOS i moim problemem jest to, że chcę wstawić dane do atrybutu boolean do bazy danych, przyjmując wartość UISwitch.

Problem polega na tym, że nie wiem, jaką metodę mam wywoływać (np. Tekst działa tak samo, ale w przypadku UITextField). Zrobiłem małe wyszukiwanie google, ale bez wyników. Oto kod:

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

howmany jest textfield, ważne jest UISwitch

Odpowiedz

17

Pan spojrzał na docs dla UISwitch? Generalnie powinieneś sprawić, żeby dokumenty były twoim pierwszym punktem połączenia podczas wyszukiwania informacji, potem zwracaj się do google, a następnie do przepełnienia stosu, jeśli naprawdę nie możesz znaleźć tego, co jest po tobie.

Chcesz, @property(nonatomic, getter=isOn) BOOL on nieruchomość jak:

important.isOn 

Jeśli nie masz podstawowe dane określone w użyciu prymitywów może trzeba owinąć że logiczną w NSNumber:

[NSNumber numberWithBool:important.isOn] 
+3

To powinno być important.on lub [important isOn]. important.isOn nie zadziała. –

+0

@NickLockwood Dokumenty określają właściwość jako '@property (nonatomic, getter = isOn) BOOL on' –

+3

@ Paul.s right, ale' isOn' jest używane tylko wtedy, gdy faktycznie używasz go jako metody. Jeśli używasz składni dot, użyjesz nazwy właściwości: 'on'. –

22

Aby zapisać to

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

Aby je odzyskać

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

+1 za wskazanie, jak odzyskać wartość. –

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

drugiej plakaty są poprawne, że trzeba użyć metody Ison aby uzyskać wartość, to jednak zwraca wartość BOOL, której nie można przejść bezpośrednio do setValue: forKey ponieważ oczekuje, że metoda obiekt.

Aby ustawić wartość na podstawowej obiektu danych, najpierw zawinąć go w NSNumber, tak:

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

Umieszczenie danych NSNumber w atrybutach logicznych jest poprawne? Poprawiłem swój kod na podstawie Twojej odpowiedzi, ale błąd nadal występuje po zapisaniu danych. – Eristikos

+0

NSNumber to oficjalny sposób na zawijanie obiektu BOOL jako obiektu, więc powinien działać. Jaki błąd widzisz? –

+0

Inną opcją jest zadeklarowanie ważnej właściwości jako BOOL na głównej klasie danych przy użyciu @property (jednoatomowe, przypisz) BOOL ważne; a następnie użyj "@dynamic important;" w pliku .m, aby go zsyntetyzować. Możesz wtedy ustawić go bezpośrednio jako BOOL używając newContact.important = important.on; –

3

użyłem

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

And

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