Переменная экземпляра не сохраняет свое значение - PullRequest
1 голос
/ 26 августа 2011

Я изучаю Objective-C прямо сейчас, и для практики я написал простой генератор случайных лабиринтов для OS X, который отлично работает. Затем я попытался добавить больше взаимодействия с кнопками, но у меня возникли проблемы с переменными экземпляра, поскольку они не сохраняют значение, которое я им назначаю. Я сталкивался с несколькими вопросами об одной и той же проблеме, но их решение не решило мою проблему. Я также проверил, сохраняется ли та же проблема в упрощенной версии программы, что и происходит.

Полагаю, я делаю что-то не так, но не знаю что. Вот что я сделал:

  • Создан новый проект
  • Добавлен подкласс NSView под названием «TestClass»
  • Добавлено представление с классом TestClass в окне в MainMenu.xib
  • Добавлен объект для TestClass в MainMenu.xib
  • Добавил кнопку в вид и установил ее тег на 1
  • Добавил следующий код в TestClass.h и TestClass.m и подключил к нему кнопку:

TestClass.h: #import

@interface TestClass : NSView
{
    NSNumber *number;
    NSButton *test;
}

@property (nonatomic, retain) NSNumber *number;


@property (assign) IBOutlet NSButton *test;

- (IBAction)testing:(id)sender;

@end

TestClass.m: #import "TestClass.h"

@implementation TestClass

@synthesize number;
@synthesize test;

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (IBAction)testing:(id)sender
{
    self.number = [[NSNumber numberWithLong:[sender tag]] retain];
}

- (void) drawRect:(NSRect)dirtyRect
{
    NSLog(@"%@", number);
}

@end

Всякий раз, когда я нажимаю кнопку, NSLog просто возвращает ноль несколько раз.

Обычно я все выясняю сам (в конце концов ...), но на этот раз это действительно сводит меня с ума, так есть ли кто-нибудь, кто может мне помочь?

1 Ответ

0 голосов
/ 19 октября 2011

Поместите NSLog в testing: или просто установите точку останова и посмотрите, что хранится в number.

Обратите внимание, что self.number = [[NSNumber numberWithLong:[sender tag]] retain]; дважды сохраняет объект NSNumber (что неверно),но это не должно вызывать немедленной ошибки.

...