2017-04-24 1 views
0

SituationNSInvalidArgumentException, ne peut pas faire une requête de comparaison pour le type: (null)

Je suis en train de changer un projet Objective-C de Parse à Firebase. Ce que j'essaie de faire est de remplacer les codes Parse par le code Firebase correspondant. Cette stratégie a fonctionné pour ma page de connexion et la connexion a été réussie La page de connexion appelle une section à MainViewController. Les charges MainViewController mais les application se bloque avec une error

application Mettre fin à cause de l'exception non interceptée 'NSInvalidArgumentException', la raison: 'Impossible faire une requête de comparaison pour le type: (null)'

Ce que je est-ce que

This est le code firebase j'ai ajouté dans LoginViewController - (IBAction)loginButtonClicked:(id)sender

//Checking for username and password 

_emailId=_emailTextField.text; 
_password=_passwordTextField.text; 

//reference for firebase 
self.ref = [[FIRDatabase database] reference]; 

if([self isInternet]) 
{ 
    //firebase authentication 
    [[FIRAuth auth]signInWithEmail:_emailId password:_password completion:^(FIRUser *user, NSError *error) { 
          // ... 
    if (error) { 
      //login failed 
      [self failsLoginWithError:@"Please try again later"]; 
     } 
    else 
    { 
     NSLog(@"Login Successful"); 
     [self successLoginWithResposne:user]; 
    } 

et this est le code d'analyse syntaxique j'ai commenté

PFQuery *query=[PFQuery queryWithClassName:@"normal"]; 
    [query whereKey:@"usermail" equalTo:_emailId]; 
    [query whereKey:@"password" equalTo:_password]; 
    [query whereKey:@"user_removed" equalTo:@(0)]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
     if (error) { 
//login failed 
      [self failsLoginWithError:@"Please try again later"]; 
     } 
     if ([objects count]==0) { 
      NSLog(@"Invalid username or passowrd"); 
      [self failsLoginWithError:@"Invalid email or password"]; 

     } else { 

      PFObject *obj = [objects firstObject]; 
      ud = [NSUserDefaults standardUserDefaults]; 
      BOOL isBlocked = [[obj valueForKey:@"blocked"] boolValue]; 
      BOOL isLogged = [[obj valueForKey:@"logged"]boolValue]; 
      NSString *userID = [ud objectForKey:@"ObjectID"]; 

      if (isLogged) { 
       if ([userID isEqualToString:obj.objectId]) { 

        if (isBlocked) { 
         [self failsLoginWithError:@"Login Blocked! Please contact your Doctor"]; 
        }else{ 
         //      Login success 
         [self successLoginWithResposne:obj]; 
        } 
       } 
       else{ 
        //      login Failed 
        [obj setValue:@(1) forKey:@"blocked"]; 
        [obj saveInBackground]; 
        [self failsLoginWithError:@"Login Blocked! Please contact your Doctor"]; 
       } 

      } 
      else { 
       //     login success 
       [obj setValue:@(1) forKey:@"logged"]; 
       [obj saveInBackground]; 
       [self successLoginWithResposne:obj]; 

      } 



     } 
    } ]; 

Le message d'erreur "exception due à la comparaison avec une valeur nulle". Supposons que cela soit dû à un code d'analyse quelque part comparant une valeur reçue de LoginViewController (que j'ai commentée).

Question

Comment résoudre ce problème? Comment trouver la partie où se déroule la comparaison? Dois-je remplacer chaque code d'analyse par du code Firebase avant de l'exécuter? si oui, comment trouver chaque code d'analyse dans le projet?

Crash Report:

4

ligne exact où les accidents de code:

5

Répondre

0

Vous pouvez regarder le parse du système utilisateur a construit dans

Exemple

[PFUser logInWithUsernameInBackground:_emailId password:_password 
    block:^(PFUser *user, NSError *error) { 
    if (user) { 
     if(user[@"blocked"] == @YES){ 
      return [PFUser logOut]; 
     }else{ 
      // USER AUTHENTICATED 
     } 

    } else { 
     // Password, Conection 
    } 
}]; 

Tous magasin sera disponible en utilisant cette anywhare dans votre application:

PFUser *currentUser = [PFUser currentUser]; 
if (currentUser) { 
    // do stuff with the user 
} else { 
    // show the signup or login screen 
} 

Si vous voulez auth avec l'e-mail insted d'un « nom d'utilisateur » il suffit d'utiliser le nom d'utilisateur comme l'e-mail dans l'enregistrement.

+0

L'a corrigé. Ce n'était pas à cause de l'analyse. Le 'NSUserDefaults' ne fonctionnait pas correctement. Merci pour votre temps. –