Какао ивар теряет значение между init и drawRect - PullRequest
0 голосов
/ 31 декабря 2010

Я здесь не полный n00b, но я чувствую, что, должно быть, упускаю что-то важное.Я передаю переменную в новый экземпляр класса через метод init класса:

@synthesize side;

- (id)initWithSide:(NSString *)aSide frame:(NSRect)frameRect
{
    if (self = [super initWithFrame:(NSRect)frameRect]) {
        self.side = aSide;
    }
    NSLog(@"Side is %@", self.side);
    return self;
}

Выходные данные NSLog () действительно показывают правильное значение здесь.Теперь метод drawRect:, который затем запускается для рисования представления, имеет аналогичный вызов:

- (void)drawRect:(NSRect)rect
{
    NSLog(@"Side is %@", self.side);

И на этот раз NSLog () сообщает Side как nil!Проходя через него с помощью отладчика, я вижу, что значение для стороны установлено, затем оно входит в регистры (все те шестнадцатеричные коды, которые я не понимаю), затем, когда оно снова выпрыгивает в метод drawRect:просто ноль

Если кто-то может пролить свет на это, я буду признателен за это!

Приветствия, Аарон

Ответы [ 2 ]

2 голосов
/ 31 декабря 2010

Обычно это способ написать свойство для NSString *.Назначение используется для примитивных типов (оно не увеличивает счет сохранения для объекта), а также сохраняет или копирует для объектов.

 @property (readwrite, copy) NSString * side
1 голос
/ 31 декабря 2010

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

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

...