NSNumber类不响应initWithFloat:方法

时间:2011-03-12 17:02:09

标签: objective-c cocoa-touch

我试图让NSNumber响应initWithFloat方法,但我的程序响应“NSNumber可能不响应initWithFloat方法”并且没有返回正确的结果。

以下是代码:

#import "VariableTestAppDelegate.h"

@implementation VariableTestAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{ 
    NSNumber *myNumber;
    myNumber = [NSNumber initWithFloat:3.47];
    NSLog(@"The value in NSNumber is %@", myNumber);
}
@end

发送到控制台的错误消息显示为:

2011-03-12 09:00:08.569 VariableTest[6228:a0f] +[NSNumber initWithFloat:]: unrecognized selector sent to class 0x7fff70bfd808
2011-03-12 09:00:08.572 VariableTest[6228:a0f] +[NSNumber initWithFloat:]: unrecognized selector sent to class 0x7fff70bfd808

有什么问题? TIA。

4 个答案:

答案 0 :(得分:1)

initWithFloat:是您尝试在类上调用的实例方法,使用类方法创建新的自动释放的NSNumber实例 numberWithFloat:

NSNumber *myNumber = [NSNumber numberWithFloat:3.47];

答案 1 :(得分:1)

-initWithFloat:不是类方法。您需要先创建一个实例,然后发送它-initWithFloat:

myNumber = [[NSNumber alloc] initWithFloat: 34.7];

或者您可以使用便捷方法

myNumber = [NSNumber numberWithFloat: 34.7];

这第二个案例为您提供了一个您不拥有的NSNumber。如果你想保留它,你需要保留它。

答案 2 :(得分:1)

-init-initWith...:是实例方法,而不是类方法。您应该将alloc发送到该类以创建新实例,然后发送初始化消息。

[[NSNumber alloc] initWithFloat: 12.0f]

有时类定义了方便构造函数,它们分配一个自动释放的对象并在同一个方法中初始化它。因此:

[NSNumber numberWithFloat: 12.0f]

然而,这些永远不会以init开头。

答案 3 :(得分:0)

您可以使用类方法然后保留它。然后你必须稍后发布它。

NSNumber *aNumber = [[NSNumber numberWithFloat:3.14] retain];