Obj-C如何调用带返回的方法?

时间:2013-01-14 21:19:12

标签: iphone objective-c xcode4.5

我有一个带有返回值的方法,我想从MainviewController.m调用它。另外,我必须在调用它时将值(float)传递给方法。 但是我遇到了麻烦,我尝试调试并在方法中添加一些断点和NSLog,但似乎没有调用该方法,因为调试器不会在断点处停止并且不会打印NSLog 。 (最终打印(calculatorScreen.text ...)只打印(null))

MainViewController.m

currentNumber = currentNumber *10 + (float)[sender tag];
NSNumber *convertedNumber = [[NSNumber alloc] init];
NSString *nf = [convertedNumber customFormatNumber:currentNumber];
calculatorScreen.text = [NSString stringWithFormat:@"%@",nf]; // it's printing (null) :(

的NSNumber + FormatNumber.h

@interface NSNumber (FormatNumber)
-(NSString *) customFormatNumber:(float)n1;

的NSNumber + FormatNumber.m

-(NSString *) customFormatNumber:(float)n1
{
    NSLog(@" %f" ,n1); // for debug and a breakpoint here
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
        [formatter setMaximumFractionDigits:2];
        [formatter setMinimumFractionDigits:0];
        NSString *nf = [formatter stringFromNumber:[NSNumber numberWithFloat:n1]];
    NSLog(@"Class %@" ,nf); // for debug
    return nf;
}

我在这里缺少什么?

2 个答案:

答案 0 :(得分:5)

[[NSNumber alloc]init]返回nil,因为您没有指定数字值,并且忽略了无目标操作。

让我告诉你,你正在采取一种漫长而不必要的方式,我会这样写:

NSNumberFormatter* formatter=[NSNumberFormatter new];
[formatter setMaximumFractionDigits:2];
[formatter setMinimumFractionDigits:0];
formatter.numberStyle= NSNumberFormatterDecimalStyle;
calculatorScreen.text= [formatter stringFromNumber: @(currentNumber*10.0+[sender tag]) ];

答案 1 :(得分:0)

您是否试图覆盖NSNumber?

对于CustomNumber.h

@interface CustomNumber:NSNumber
-(NSString *) customFormatNumber:(float) n1;

对于CustomNumber.m

-(NSString *) customFormatNumber:(float)n1
{
    NSLog(@" %f" ,n1); // for debug and a breakpoint here
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setMaximumFractionDigits:2];
    [formatter setMinimumFractionDigits:0];
    NSString *nf = [formatter stringFromNumber:[NSNumber numberWithFloat:n1]];
    NSLog(@"Class %@" ,nf); // for debug
    [formatter release];
    return nf;
}

然后在MainViewController.m

currentNumber = currentNumber *10 + (float)[sender tag];
CustomNumber *convertedNumber = [[CustomNumber alloc] init];
calculatorScreen.text = [convertedNumber customFormatNumber:currentNumber];

OR

在MainViewController.m中创建方法然后代码将

currentNumber = currentNumber *10 + (float)[sender tag];
calculatorScreen.text = [self customFormatNumber:currentNumber];