Почему я не могу получить доступ к автоматически синтезированному ивуру?

Я читал, что с самой последней версией Xcode вам даже не нужно использовать синтез для генерации ivar, getter и setters, что сам Xcode обрабатывает это для вас и создает что-то вроде _youIvarName для вас, однако, попробовав это, я не смог сделать эту работу.

Даже если я объявляю свои свойства, когда я пытаюсь получить доступ к этим _yourVarName, Xcode говорит, что такой переменной не существует.

пример

Заголовочный файл:

@interface ComplexNumber : NSObject
@property  double realPart;
@property  double imaginaryPart;

Реализация:

#import "ComplexNumber.h"

@implementation ComplexNumber


-(double)modulus
{
    return sqrt(_realPart*_realPart + _imaginaryPart*_imaginaryPart);
}

-(void)setRadius:(double)aRadius phase:(double)aPhase
{
    [self setRealPart] = aRadius * cos(aPhase);
    self.imaginaryPart = aRadius * sin(aPhase);
}

-(void)print
{
    NSLog(@"%g + %gi", realPart, imaginaryPart);
}

Ни одна из этих попыток доступа к этим _yourIvar не сработала... какие-либо подсказки о том, что я здесь не понимаю?

РЕДАКТИРОВАТЬ:

Мой главный вопрос, если я объявлю @property собирается ли Xcode автоматически генерировать геттеры, сеттеры и переменные экземпляра (с начальным подчеркиванием, _myVar) без необходимости использовать @synthesize? Это то, что я читал здесь на stackru, и я не уверен, что это действительно работает.

1 ответ

Решение

Почти все выглядит так, как будто должно работать. Одна строка, которая не является допустимой целью-C,

[self setRealPart] = aRadius * cos(aPhase);

который должен быть вместо

[self setRealPart:aRadius * cos(aPhase)];

это может быть ошибка, которую вы видите?

Другие вопросы по тегам