如何在ObjC中访问自定义类的实例方法(iOS编程)

时间:2011-07-15 12:16:35

标签: iphone objective-c ios pointers ios4

我正在玩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;
}

希望我很清楚,有人可以指出我正在做的明显错误:)

谢谢!

5 个答案:

答案 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,但感谢有关声明的属性的提示。

干杯!