Понимание логики Objective-C - PullRequest
       22

Понимание логики Objective-C

0 голосов
/ 22 февраля 2012

Привет, ребята, я пытаюсь сделать базовый калькулятор (польский стиль), но не могу понять, почему мой код для остановки двойного десятичного ввода не будет работать. Я нашел другой способ в другом потоке, но я хочу понять, почему мой код не работает. Я использую nsRange для поиска десятичных знаков в уже введенных цифрах в метке, а затем в качестве второго условия, чтобы определить, является ли добавляемая цифра десятичной.

- (IBAction)digitPressed:(UIButton *)sender 
{
    NSString *digit = [sender currentTitle];  // the number on the button pressed


    NSString *decimalErrorChecker = [[self display] text];  //search line for .
    NSRange range = [decimalErrorChecker rangeOfString:@"."];



    if ((range.location != NSNotFound) && ((digit == @"."))) {  //double if to stop 2nd 
           //SHOW ERROR


    }else  //APPEND DIGIT TO ALREADY ENTERED String.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Сравните NSString, используя isEqualToString, а не ==:

if ((range.location != NSNotFound) && [digit isEqualToString: @"."])
0 голосов
/ 22 февраля 2012

Почему бы просто не поддерживать флаг, который указывает, был ли введен десятичный знак?

-(IBAction)digitPressed:(id)sender {
   static BOOL didDecimal = NO;

   // setup yadda

   const BOOL digitIsDecimal = [digit isEqualToString:@"."]; // your use of == here is bad
   if (digitIsDecimal && didDecimal) { error; return; }

   didDecimal |= digitIsDecimal;

   // append yadda
}

Конечно, это не поможет, если пользователь удалит десятичную дробь, поэтому, возможно, вам потребуется реализовать некоторую логику в UITextViewDelegate ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...