我正在玩iOS SDK并试图在iPhone应用程序中使用自制类。
#import <Foundation/Foundation.h>
#import "UIKit/UIKit.h"
@interface MyPoint
: NSObject {
CGFloat x;
CGFloat y;
}
- (void) setX:(CGFloat)x_;
- (void) setY:(CGFloat)y_;
- (CGFloat) getX;
- (CGFloat) getY;
- (CGFloat) getDistance;
@end
这是我的Point类的标题。现在在应用程序中我想输入2个数字(在两个不同的文本字段中)然后当我按下“计算”按钮时我调用函数getDistance
- (IBAction)calcDistance:(id)sender {
CGFloat x = [fieldx.text doubleValue];
CGFloat y = [fieldy.text doubleValue];
[point setX:(x)];
[point setY:(y)];
CGFloat test = [point getX];
CGFloat test2 = [point getY];
CGFloat result = [point getDistance];
NSString *resultString = [[NSString alloc] initWithFormat: @"Distance: %f",result];
resultLabel.text = resultString;
[resultString release];
}
我的印象是
[name method]
是访问指针的成员方法的方法,但是没有做任何事情,在调试我想以上述方式分配的任何值时,没有任何变化。
最后,我的应用程序界面:
@interface iOS4ViewController : UIViewController {
UITextField* fieldx;
UITextField* fieldy;
UILabel* resultLabel;
MyPoint* point;
}
希望我很清楚,有人可以指出我正在做的明显错误:)
谢谢!
答案 0 :(得分:1)
在我看来,您可能没有分配MyPoint
的实际实例。如果你这样尝试它是否有效:
- (IBAction)calcDistance:(id)sender {
point = [[MyPoint alloc] init];
CGFloat x = [fieldx.text doubleValue];
CGFloat y = [fieldy.text doubleValue];
[point setX:(x)];
[point setY:(y)];
CGFloat test = [point getX];
CGFloat test2 = [point getY];
CGFloat result = [point getDistance];
NSString *resultString = [[NSString alloc] initWithFormat: @"Distance: %f",result];
resultLabel.text = resultString;
[resultString release];
[point release];
}
至于如何在自定义类的实例(或Objective-C中的任何其他对象)上调用方法,你是对的,正确的语法是[myObjectVarName method]
。
答案 1 :(得分:0)
您是否分配了point
?如果一个对象是nil,在它上面调用一个方法将返回nil,而不是一个错误。
答案 2 :(得分:0)
我假设您尚未定义头文件中声明的getter / setter方法。如果是这种情况,您必须在实施文件中定义,或者,您可以使用声明的属性来实现您的需求。在头文件中创建属性,如
@property(nonatomic) CGFloat x, y;
在实现文件
中合成它@synthesize x, y;
合成属性会自动为属性创建getter和setter方法。
答案 3 :(得分:0)
您还需要包含您尝试调用方法的Point.h文件...
答案 4 :(得分:0)
首先:感谢所有的帮助。 现在我已经打电话了
point = [[MyPoint alloc] init];
在函数calcDistance中作为aroth(和其他人)的建议。
@EmptyStack,我在实现文件中定义了setter和getter,但感谢有关声明的属性的提示。
干杯!