我正在学习Objective-C并尝试一些示例代码.我收到以下错误消息:
unrecognized selector sent to class
Run Code Online (Sandbox Code Playgroud)
这是我的代码.
Basics.m
#import <Foundation/Foundation.h>
#import "Fraction.h"
int main (int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction;
// Create an instance of a Fraction
myFraction = [Fraction alloc];
myFraction = [Fraction init];
// set Fraction to 1/3
[myFraction setNumerator: 1];
[myFraction setDenominator: 3];
// Display the value using the print method
NSLog(@"The value of myFraction is:");
[myFraction print];
[myFraction release];
[pool drain];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Fraction.h
#import <Foundation/Foundation.h>
// -- interface section --//
@interface Fraction : NSObject {
int numerator;
int denominator;
}
// public method signatures
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
@end
Run Code Online (Sandbox Code Playgroud)
Fraction.m
//--implementation section --//
@implementation Fraction
-(void) print
{
NSLog(@"%i/%i",numerator,denominator);
}
-(void) setNumerator: (int) n
{
numerator = n;
}
-(void) setDenominator: (int) d
{
denominator = d;
}
@end
Run Code Online (Sandbox Code Playgroud)
Jus*_*ers 15
alloc是一个类方法,但它init是一个实例方法.在您的代码中,编译器抱怨它找不到任何命名的类方法init,这是准确的.要纠正这个问题,你应该调用init你收到的实例alloc,如下所示:
myFraction = [Fraction alloc];
myFraction = [myFraction init];
Run Code Online (Sandbox Code Playgroud)
但最常见的模式是嵌套这样的调用:
// calls -init on the object returned by +alloc
myFraction = [[Fraction alloc] init];
Run Code Online (Sandbox Code Playgroud)
这还可以帮助您避免在已分配但尚未初始化的对象上调用方法时可能发生的错误.
| 归档时间: |
|
| 查看次数: |
24135 次 |
| 最近记录: |