我在一个包含各种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"];
答案 0 :(得分:2)
<强>问题:强>
使用&lt;或者&gt;用字符串做奇怪的事情。它肯定不会一直做你想要的。
MINIMAL CODE CHANGE SOLUTION:
[usercurrentPoints intValue]
本身没有任何意义。由于您只需要修复比较,因此请将其更改为if ([usercurrentPoints intValue] < [hoursCalculated intValue])
。
更好的解决方案:
为值使用正确的数据类型。 points
和hoursCalculated
仅用作整数,因此没有理由将它们定义为字符串。我不熟悉DIOSSession,但我不明白为什么你不能将intValue
分配给int变量。
答案 1 :(得分:0)
您正在比较两个指针而不是值,结果取决于指向的对象的地址空间中的相对位置。
less-than-comparison-for-void-pointers 可能会帮助你更好地理解。