Помогите с методом, который возвращает значение, запустив метод другого объекта - PullRequest
0 голосов
/ 26 июня 2010

У меня есть класс, который запускает следующий метод (получатель):

// the interface
@interface MyClass : NSObject{
    NSNumber *myFloatValue;
}

- (double)myFloatValue;
- (void)setMyFloatValue:(float)floatInput;

@end

// the implementation
@implementation
- (MyClass *)init{
    if (self = [super init]){
        myFloatValue = [[NSNumber alloc] initWithFloat:3.14];
    }
    return self;
}

// I understand that NSNumbers are non-mutable objects and can't be
// used like variables.     
// Hence I decided to make make the getter's implementation like this
- (double)myFloatValue{
    return [myFloatValue floatValue];
}
- (void)setMyFloatValue:(float)floatInput{
    if ([self myFloatValue] != floatInput){
        [myFloatValue release];
        myFloatValue = [[NSNumber alloc] initWithFloat:floatInput;
  }

@end

Когда я нахожу курсор мыши на объект myFloatValue во время отладки, он не содержит значения.Вместо этого он говорит: «вне области видимости».

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

Ответы [ 2 ]

0 голосов
/ 27 июня 2010

Почему бы просто не установить свойство в интерфейсе и синтезировать средства доступа в реализации?

@interface MyClass : NSObject {
  float *myFloat
}

@property (assign) float myFloat;

@end

@implementation MyClass

@synthesize myFloat;

@end
0 голосов
/ 27 июня 2010

Я вижу пару ошибок:

Строка @implementation должна читаться как @implementation MyClass

Функция setMyFloatValue пропускает закрывающие ] и } - она ​​должна читать:

- (void)setMyFloatValue:(float)floatInput{
    if ([self myFloatValue] != floatInput){
        [myFloatValue release];
        myFloatValue = [[NSNumber alloc] initWithFloat:floatInput];
    }
}

Я только что протестировал его в XCode, и он работает для меня с этими изменениями.

...