неверный ввод текстового поля obj c - PullRequest
0 голосов
/ 16 февраля 2020

У меня проблема с управлением между приложением и SDK для функции. Мое приложение разделено на две части: SDK и приложение. это мой класс для "sdk":

    - (void)statusCheckPin: (User *)pinUser
                  card: (Card *)pinCard
        viewController: (UIViewController *) viewController
              delegate: (id<LoyaltyCardsSDKCompleteDelegate>)delegate{

    self.delegate = delegate;

    SDKHandler* sdkHandler = [[SDKHandler alloc] initWithUserId:pinUser.userId fiscalCode:nil sessionToken:pinUser.sessionToken];

    [sdkHandler doStatusCheckPin:pinUser.userId card:pinCard.pan viewController:viewController
                         success:^(StatusCheckPinResponse* changePin) {

        Result<StatusCheckPinResponse *> *response = [[Result<StatusCheckPinResponse*> alloc] initWithStatusCode:MOBILE_GENERIC_ERROR_MSG andResponse:changePin];

        [self callDelegateForCommand:CMD_CHANGE_PIN WithResponse:response];

    } failure:^(Result *failureResult) {

        [self callDelegateForCommand:CMD_CHANGE_PIN WithResponse:failureResult];
    }];

    PRLog(@"SDK> Received cmd: STATUS CHECK PIN");

}



- (void) doStatusCheckPin: (NSString *) pinUser card: (NSString *) pinCard viewController: (UIViewController *) viewController success:(successSDKType)success failure:(failureSDKType)failure{

    self.mcCardEnrollmentSuccessCallback = success;
    self.mcCardEnrollmentFailureCallback = failure;

    self.user = [[User alloc ]init];
    self.card = [[Card alloc ]init];

//    self.testViewController = [[TestViewController alloc] init];
    self.testViewController = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:[NSBundle bundleForClass:[TestViewController class]]];


    if([self.testViewController.panPersonalTextField isEqual: @"0"] ||
       [self.testViewController.panPersonalTextField isEqual: @"1"] ||
       [self.testViewController.panPersonalTextField isEqual: @"2"] ||
       [self.testViewController.panPersonalTextField isEqual: @"3"] ||
       [self.testViewController.panPersonalTextField isEqual: @"4"] ||
       [self.testViewController.panPersonalTextField isEqual: @"5"]){
        StatusCheckPinResponse *statusCheckPin = [[StatusCheckPinResponse alloc] init];
        [statusCheckPin setErrorCase:@"NOT_ENROLLED"];

        Result *errore = [[Result alloc] initWithStatusCode:@"2" andResponse:statusCheckPin];
        self.mcCardEnrollmentFailureCallback(errore);

    } else if ([self.testViewController.panPersonalTextField isEqual: @"6"] ||
               [self.testViewController.panPersonalTextField isEqual: @"7"] ||
               [self.testViewController.panPersonalTextField isEqual: @"8"] ||
               [self.testViewController.panPersonalTextField isEqual: @"9"]){
        StatusCheckPinResponse *statusCheckPin = [[StatusCheckPinResponse alloc] init];
        [statusCheckPin setErrorCase:@"ENROLLED"];

        Result *errore = [[Result alloc] initWithStatusCode:@"1" andResponse:statusCheckPin];
        self.mcCardEnrollmentFailureCallback(errore);

    }
}

, и это мое "приложение":

    case CHECK_PIN:{
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{

        self.user = [[User alloc ]init];
        self.card = [[Card alloc ]init];

        self.user.userId = self.userIdPersonalTextField.text;
        self.user.sessionToken = self.sessionTokenPersonalTextField.text;
        self.user.fiscalCode = self.fiscalCodePersonalTextField.text;
        self.user.phoneNumber = self.phoneNumberPersonalTextField.text;
        self.user.callerApp = self.callerAppPersonalTextField.text;
        self.card.pan = self.panPersonalTextField.text;
        self.card.driverCode = self.driverCodePersonalTextField.text;

        [self.loyaltySDK statusCheckPin:self.user card:self.card viewController:self delegate:self];
    });
}

, основанное на числе, введенном в текстовом поле "pan", позвольте мне показать 2 или 3 разных ответов. Функция, которую я должен написать лучше, такова:

    if([self.testViewController.panPersonalTextField isEqual: @"0"] ||
   [self.testViewController.panPersonalTextField isEqual: @"1"] ||
   [self.testViewController.panPersonalTextField isEqual: @"2"] ||
   [self.testViewController.panPersonalTextField isEqual: @"3"] ||
   [self.testViewController.panPersonalTextField isEqual: @"4"] ||
   [self.testViewController.panPersonalTextField isEqual: @"5"]){
    StatusCheckPinResponse *statusCheckPin = [[StatusCheckPinResponse alloc] init];
    [statusCheckPin setErrorCase:@"NOT_ENROLLED"];

    Result *errore = [[Result alloc] initWithStatusCode:@"2" andResponse:statusCheckPin];
    self.mcCardEnrollmentFailureCallback(errore);

} else if ([self.testViewController.panPersonalTextField isEqual: @"6"] ||
           [self.testViewController.panPersonalTextField isEqual: @"7"] ||
           [self.testViewController.panPersonalTextField isEqual: @"8"] ||
           [self.testViewController.panPersonalTextField isEqual: @"9"]){
    StatusCheckPinResponse *statusCheckPin = [[StatusCheckPinResponse alloc] init];
    [statusCheckPin setErrorCase:@"ENROLLED"];

    Result *errore = [[Result alloc] initWithStatusCode:@"1" andResponse:statusCheckPin];
    self.mcCardEnrollmentFailureCallback(errore);

}

, которая, по правде говоря, вообще не работает, потому что она всегда получает нулевое текстовое поле, несмотря на добавление пользователя в число ..

1 Ответ

0 голосов
/ 21 февраля 2020

Похоже, что вы сравниваете UITextField * с NSString *, который определенно не будет делать то, что вы намерены.

    NSString* text = self.testViewController.panPersonalTextField.text;

    if( [text isEqualToString: @"0"] ||
        [text isEqualToString: @"1"] ||
        [text isEqualToString: @"2"] ||
        [text isEqualToString: @"3"] ||
        [text isEqualToString: @"4"] ||
        [text isEqualToString: @"5"] )
    {
        // do things
    }

    else if ( [text isEqualToString: @"6"] ||
              [text isEqualToString: @"7"] ||
              [text isEqualToString: @"8"] ||
              [text isEqualToString: @"9"] )
    {
        // do other things
    }

Может быть достаточно, чтобы начать вас, но трудно сказать не зная больше о текстовом поле. Если ввод вашего пользователя не ограничен одним di git, вы можете добавить проверку для этого. Кроме того, если есть вероятность, что это может быть вызвано, когда в текстовом поле нет содержимого, я обычно предпочитаю сравнивать строки таким образом, если присутствуют константы:

if ( [@"constant string" isEqualToString:nullableVar] )
{
    // do things
}

Также недостаточно информации в вашем вопросе, чтобы понять, почему они вообще должны оставаться как строки NSS, в противном случае вы можете рассмотреть возможность добавления всех этих кодов в перечисление, что сделает ваши сравнения еще проще.

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