Как сделать мои переменные доступными для других классов? - PullRequest
0 голосов
/ 07 ноября 2011

Переменные bounds, width и height в настоящее время являются локальными переменными.Я не могу получить к ним доступ из других классов или даже получить доступ к ним из другого метода.

Как я могу сделать эти переменные доступными для всего экземпляра?Я попытался поместить их в файл .h и переименовать их в CGFloats безрезультатно.

#import "TicTacToeBoard.h"

@implementation TicTacToeBoard

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    CGRect bounds = [self bounds];
    float width = bounds.size.width;
    float height = bounds.size.height;

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(ctx, 0.3, 0.3, 0.3, 1);
    CGContextSetLineWidth(ctx, 5);
    CGContextSetLineCap(ctx, kCGLineCapRound);

    CGContextMoveToPoint(ctx, width/3, height * 0.95);
    CGContextAddLineToPoint(ctx, width/3, height * 0.05);
    CGContextStrokePath(ctx);

}

@end

Ответы [ 4 ]

1 голос
/ 07 ноября 2011

Вы можете использовать свойства, чтобы сделать переменные доступными для других объектов.

В вашем интерфейсе добавьте что-то вроде этого:

@property (nonatomic, retain) NSString *myString;

, а затем добавьте

@synthesize mystring;

к вашей реализации.

Для получения свойства и его изменения будут созданы два метода.

[myObject myString]; // returns the property
[myObject setMyString:@"new string"]; // changes the property

// alternately, you can write it this way
myObject.myString;
myObject.mystring = @"new string";

Вы можете изменить значение свойства в классе с помощью [self setMystring:@"new value"] или, еслиу вас уже есть та же самая переменная, объявленная в интерфейсе, и затем вы создаете свойство, из которого вы можете продолжать использовать свои переменные внутри класса таким, какой вы есть.

В документации для разработчиков есть более подробная информация о свойствах: http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1

1 голос
/ 07 ноября 2011

границы, ширина и высота - это локальные переменные, которые существуют только в контексте метода drawRect.

Почему вы не используете:

CGRect bounds = [self bounds];
float width = bounds.size.width;
float height = bounds.size.height;

в других методах?

0 голосов
/ 07 ноября 2011

Используйте геттеры-сеттеры или сгенерируйте их с помощью

@property(nonatomic) CGFloat width;

@synthesize width;
0 голосов
/ 07 ноября 2011

Сделайте их членами-переменными или свойствами и напишите методы доступа или синтезируйте их. См. Справочник по языку Objective-C .

...