2017-04-25 109 views
0

我有一个包含各种if语句的按钮内的代码块。除了我的最后一个所有的工作,Obj-c-如果语句被跳过?

如果(usercurrentPoints < hoursCalculated){

这个if语句似乎被跳过,我不知道为什么(我想下来,削减该代码尽可能多)? E.g.如果points大于currentuserPoints,则会弹出警告。然而它绕过了这一点,并且无论如何只是保存我的数据(因此,发送我的用户进入负点平衡)。任何帮助表示赞赏!

- (IBAction)sendMessage:(id)sender { 

     NSInteger hour = [components hour]; 
     NSInteger minute = [components minute]; 

     NSString *points; 

     if (hour <= 1) { 

      points = @"1"; 


     } else if (hour > 1 && hour < 9) { 

      points = @"9"; 


     } else if (hour <= 9) { 

      points = @"9"; 

     } else if (hour > 9 && hour <= 24) { 

      points = @"24"; 


     } else if (hour > 24 && hour <= 48) { 

      points = @"48"; 

     } else if (hour > 48 && hour <= 72) { 

      points = @"72"; 

     } else if (hour > 72 && hour <= 96) { 

      points = @"96"; 

     } else if (hour > 96) { 

      points = @"96"; 

      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Uh Oh!" 
                  message:@"Requests cannot exceed 5 days. Please create separate requests." 
                  delegate:self 
                cancelButtonTitle:@"OK" 
                otherButtonTitles:nil]; 
      [alert show]; 




      self.sendMessage.enabled = NO; 



      return; 


     } 






     NSDictionary *swapValues = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:points, nil] forKeys:[NSArray arrayWithObjects:@"value", nil]]; 
     NSDictionary *totalPoints = [NSDictionary dictionaryWithObject:[NSArray arrayWithObject:swapValues] forKey:@"und"]; 

     [nodeData setObject:totalPoints forKey:@"field_swapvalue"]; 



     NSDictionary *enddateValues = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:formattedendDate, nil] forKeys:[NSArray arrayWithObjects:@"value", nil]]; 

     NSDictionary *finalendDate = [NSDictionary dictionaryWithObject:[NSArray arrayWithObject:enddateValues] forKey:@"und"]; 

     [nodeData setObject:finalendDate forKey:@"field_endswaptime"]; 


     NSDictionary *swapInitiated = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"Requested", nil] forKeys:[NSArray arrayWithObjects:@"value", nil]]; 
     NSDictionary *swapRequest = [NSDictionary dictionaryWithObject:[NSArray arrayWithObject:swapInitiated] forKey:@"und"]; 

     [nodeData setObject:swapRequest forKey:@"field_swapaccepted"]; 


     NSString *hoursCalculated = points; 

      NSString *usercurrentPoints = [[[DIOSSession sharedSession] user] objectForKey:@"field_points_balance"][@"und"][0][@"value"]; 
     NSLog(@"USERS CURRENT BALANCE %@", usercurrentPoints); 

[usercurrentPoints intValue]; 
[hoursCalculated intValue]; 


    if (usercurrentPoints < hoursCalculated) { 
      NSLog(@"CALCULATED %@", hoursCalculated); 


      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Uh Oh!" 
                  message:@"You don't have enough hours to complete this." 
                  delegate:self 
                cancelButtonTitle:@"OK" 
                otherButtonTitles:nil]; 
      [alert show]; 




     } else { 


      int result = [usercurrentPoints intValue] - [points intValue]; 


      NSString *resultPoints = [NSString stringWithFormat:@"%d", result]; 


      NSMutableDictionary *userData = [NSMutableDictionary new]; 


      NSDictionary *targetPoints = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects: resultPoints, nil] forKeys:[NSArray arrayWithObjects:@"value", nil]]; 
      NSDictionary *finalPoints = [NSDictionary dictionaryWithObject:[NSArray arrayWithObject:targetPoints] forKey:@"und"]; 

      [userData setObject:finalPoints forKey:@"field_points_balance"]; 
+0

您是否尝试添加断点并通过代码? –

+0

@Shabirjan是的,如果语句被跳过。 – Brittany

+0

使用int而不是NSInteger,看看会发生什么? –

回答

2

问题:

使用<或>用绳子做怪异的东西。它一定不会做你想要的。

最少的代码变化解决方案:

[usercurrentPoints intValue]通过本身并没有什么意义。由于您只需要修正比较,请将其更改为if ([usercurrentPoints intValue] < [hoursCalculated intValue])

更好的解决方案:

使用该值的正确的数据类型。 pointshoursCalculated只能用作整数,所以没有理由将它们定义为字符串。我对DIOSSession不熟悉,但是我不明白为什么你不能将intValue分配给一个int变量。