2017-04-24 70 views
0

形勢NSInvalidArgumentException,不能對類型比較查詢:(空)

我想從解析更改Objective-C的項目火力地堡。我想要做的是用相應的firebase代碼替換Parse代碼。此策略適用於我的登錄頁面並且登錄成功 登錄頁面將調用segue到MainViewController。該MainViewController負載,但應用程序崩潰與error

終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,理由是:「不能對類型比較查詢:(null)的

我難道

This是火力點代碼,我在LoginViewController - (IBAction)loginButtonClicked:(id)sender

添加210

this是解析代碼我註釋掉

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]; 

      } 



     } 
    } ]; 

該錯誤消息表示「異常由於與空值的比較」。 猜測這是由於某些解析代碼比較了從LoginViewController(我註釋掉)收到的值。

問題

如何解決這一問題? 如何找到進行比較的部分? 執行前必須用firebase代碼替換每個解析代碼嗎? 如果是這樣,如何找到項目中的每個解析代碼?

崩潰報告:

4

精確所在行代碼崩潰:

5

回答

0

,你可以看看用戶系統解析已建立在

[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 
    } 
}]; 

所有本地存儲將可通過在應用程序中使用此anywhare:

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

如果你想權威性與電子郵件insted的「用戶名」中只使用用戶名作爲註冊的電子郵件。

+0

修正了它。這不是因爲解析。 'NSUserDefaults'工作不正常。謝謝你的時間。 –