我的项目中有以下方法,我在第一行收到编译器警告:Incompatible Objective-C types initializing 'struct NSNumber *', expected 'struct NSDecimalNumber *
:
- (IBAction)sliderValueChanged:(id)sender {
// HERE IS WHERE THE WARNING OCCURS:
NSDecimalNumber *tempNumber = [NSDecimalNumber numberWithFloat:[self.slider value]];
NSDecimalNumberHandler *roundingStyle = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundBankers
scale:3
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:NO];
NSDecimalNumber *roundedNumber = [tempNumber decimalNumberByRoundingAccordingToBehavior:roundingStyle];
self.slider.value = [roundedNumber floatValue];
// Set up the percentage formatter
NSNumberFormatter *percentFormatter = [[NSNumberFormatter alloc] init];
[percentFormatter setNumberStyle:NSNumberFormatterPercentStyle];
[percentFormatter setMinimumFractionDigits:1];
[percentFormatter setMaximumFractionDigits:1];
// Find the label to update
NSUInteger onlyRow[] = {0, 0};
NSIndexPath *onlyRowPath = [NSIndexPath indexPathWithIndexes:onlyRow length:2];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:onlyRowPath];
UILabel *theLabel = (UILabel *)[cell.contentView viewWithTag:kLabelFieldTag];
NSNumber *theNumber = [NSNumber numberWithFloat:self.slider.value];
theLabel.text = [percentFormatter stringFromNumber:theNumber];
[percentFormatter release];
}
任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
numberWithFloat
方法返回一个NSNumber实例。只需将其类型转换为NSDecimalNUmber即可解决警告。
NSDecimalNumber *tempNumber = (NSDecimalNumber *)[NSDecimalNumber numberWithFloat:[self.slider value]];
答案 1 :(得分:2)
方法numberWithFloat
表示(在标题中)始终返回NSNumber对象。将方法发送到子类仍会返回NSNumber对象。我不太详细了解NSDecimalNumber,但我在这里看到了几种解决问题的方法:
(NSDecimalNumber *)
并查看其是否有效+ decimalNumberWithString: