Odpowiedz na ten temat
Pokaż wyniki od 1 do 2 z 2

  1. Dołączył
    Feb 2011
    Skąd
    Zabrze
    Postów
    22

    Cytuj | #1

    Witam,

    Tworzac aplikacje napotkalem problem ktorego nie potrafie na razie sam ogarnac. Mianowicie..

    Opis:
    W mojej aplikacji uzytkownik podaje pewna wartosc liczbowa w polu tekstowym, moze to byc wartosc zmiennoprzecinkowa, ktora zapisuje jako NSNumber. Jako ze jest to wartosc uzywana do obliczen zrobilem zabezpieczenie przed wpisaniem wartosci "nieliczbowej" korzystajac z NSNumberFormatter i dalej setNumberStyle:NSNumberFormatterDecimalStyle. Z tego co doczytalem formatter bierze pod uwage ustawienia regionalne, czyli w naszym wypadku kropka jako znak dziesietny jest odrzucana, akceptowany jest przecinek, i tak tez to dziala. Jesli user wpisze nieliczbowa wartosc, albo uzyje kropki, aplikacja wyswietla odpowiedni komunikat, jesli wartosc jest prawidlowa to jest przepisywana do zmiennej.

    Problem:
    Na innym ekranie odczytuje ta zmienna i wpisuje w labelke. I tu pojawia sie klopot, mianowicie w labelce zmienna ma kropke jako znak dziesietny, pomimo tego ze ekran wczesniej user musial uzyc przecinka. Wogole wszystkie wartosci zmiennoprzecinkowe wyswietlane sa z kropka (a jest ich troche), co moze potencjalnego usera zdziwic, bo on akurat musi uzywac przecinka wpisujac swoje wartosci.

    Pytanie:
    Taka sytuacja w aplikacji to jednak pewien brak konsekwencji, i chcialbym to naprawic. Skoro user ze wzgledu na ustawienia regionalne musi uzywac przecinka, chcialbym aby rowniez wyswietlane wartosci mialy przecinek zamiast kropki. Oczywiscie w innym regionie gdzie znakiem dziesietnym jest kropka, wszystko powinno byc wyswietlane z kropka. Pytanie brzmi - jak zmusic zmienne aby przechowywane w nich wartosci wyswietlane byly w labelce ze znakiem dziesietnym zgodnym z ustawieniami regionalnymi ?

    Grzesiek



  2. Dołączył
    Feb 2011
    Skąd
    Zabrze
    Postów
    22

    Cytuj | #2

    Wobec gaszczu odpowiedzi postanowilem podsumowac dyskusje - gdyby ktos jeszcze mial podobny problem, nie musi przeciez przebijac sie przez wszystkie strony tego watku
    Aby NSNumberFormatter byl w stanie stosowac odpowiedni separator dziesietny, oprocz

    setNumberStyle:NSNumberFormatterDecimalStyle

    trzeba mu ustawic parametr lokale poprzez

    [<formatter> setLocale:currentLocale]

    gdzie <formatter> to nazwa jaka nadalismy naszemu stworzonemu obiektowi NSNumberFormatter. To zalatwia nam sprawe odpowiedniego separatora w roznych krajach, w zaleznosci od ustawien regionalnych urzadzenia.
    Aby zmienna przechowywana w NSNumber byla wyswietlona zgodnie z powyzszymi ustawieniami, zamiast przesylania bezposrednio do labelki musi byc "przepuszczona" przez formatter, czyli robimy:

    labelka.text = [formatter stringFromNumber:zmiennaNSNumber]

    Grzesiek

Odpowiedz na ten temat