Obj-c- if语句被跳过?

时间:2017-04-25 17:48:22

标签: ios objective-c

我在一个包含各种if语句的按钮中有一段代码。所有工作除了我的最后一个,

  

if(usercurrentPoints< hoursCalculated){

这个if语句似乎被跳过了,我不确定为什么(我试图尽可能地减少这些代码)? 例如如果点数大于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"];

2 个答案:

答案 0 :(得分:2)

<强>问题:

使用&lt;或者&gt;用字符串做奇怪的事情。它肯定不会一直做你想要的。

MINIMAL CODE CHANGE SOLUTION:

[usercurrentPoints intValue]本身没有任何意义。由于您只需要修复比较,因此请将其更改为if ([usercurrentPoints intValue] < [hoursCalculated intValue])

更好的解决方案:

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

答案 1 :(得分:0)

您正在比较两个指针而不是值,结果取决于指向的对象的地址空间中的相对位置。

less-than-comparison-for-void-pointers 可能会帮助你更好地理解。