Ошибка метода получения в Objective-C - PullRequest
0 голосов
/ 26 января 2011

Я следую вместе с серией веб-уроков, связанных с Objective-C, и теперь получаю ошибку «Доступ к методу получения неизвестного источника», когда пытаюсь построить свою программу (origin является членом класса Rectangle, который я создал ).

Вот мой класс под названием PointXY:

#import <Foundation/Foundation.h>      
@interface PointXY : NSObject 
{
    int x;
    int y;
}

//Setters and Getters
@property int x;
@property int y;

//Methods
- (void) setXY : (int) xCO : (int) yCO;

@ конец

Затем я определяю класс прямоугольника, в котором есть член типа PointXY:

#import <Foundation/Foundation.h>
@class PointXY;
@interface rectangle : NSObject 
{
    float width;
    float height;
    PointXY * origin;

}

//Setters and Getters
@property float width, height;

//Instance Methods
- (float) getArea;
- (float) getPerimeter;

//We already have setters and getters defined for width
//and height. The below method is for illustration purposes
- (void) setHW: (float) h : (float) w;

//Methods to set and get origin values
- (PointXY *) getOrigin; //Returns a PointXY object
- (void) setOrigin : (PointXY *) point;

@end

Я получаю сообщение об ошибке в main, если я пытаюсь получить доступ к свойству x или y моего элемента origin через мой оператор NSLog:

#import <Foundation/Foundation.h>
#import "rectangle.h"
#import "PointXY.h"

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    //Create an object
    rectangle * myRectangle = [[rectangle alloc]init];
    PointXY * rOrigin = [[PointXY alloc]init];

    [rOrigin setXY:100 :100];
    myRectangle.origin = rOrigin;


    NSLog(@"The origin for the rectangle is %i, %i", myRectangle.origin.x, myRectangle.origin.y);


    [pool drain];
    return 0;
}

Я понимаю, что никто не может получить доступ к членам без явного определения синтезированного метода доступа или создания метода, который делает именно это, и был удивлен, увидев, что автор учебника сделал вышеупомянутое без проблем.

Возможно ли вышеизложенное? Могу ли я получить доступ к myRectangle.origin.x без синтеза источника в myRectangle или у меня что-то настроено неправильно.

Спасибо за ваше время.

1 Ответ

0 голосов
/ 26 января 2011

Origin - это переменная экземпляра, вам нужно создать для нее @property и синтезировать ее, как вы уже знаете.

//Setters and Getters
@property float width, height;
@property PointXY *origin;

Но без свойства вы можете получить доступ к источнику, выполнив это rectangle->origin, ноэто противоречит цели инкапсуляции.

Правка-источника должна быть определена как @public или @ package

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...