我试图让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。
答案 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];