实例变量不保留其值

时间:2011-08-26 19:39:30

标签: objective-c variables instance retain

我正在学习Objective-C,为了练习我为OS X编写了一个简单的随机迷宫生成器,工作正常。接下来我尝试添加一些与按钮的交互,但我遇到了实例变量的问题,因为它们没有保留我分配它们的值。我遇到过有关同一问题的多个问题,但这些问题的解决方案并没有解决我的问题。我还测试了程序的简化版本中是否存在同样的问题。

我想我做错了什么,但我不知道是什么。这是我做的:

  • 创建了一个新项目
  • 添加了一个名为“TestClass”的NSView子类
  • 在MainMenu.xib
  • 的窗口中添加了一个包含类TestClass的视图
  • 在MainMenu.xib
  • 中为TestClass添加了一个对象
  • 在视图中添加了一个按钮,并将其标记设置为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只会多次返回null。

我通常会自己弄清楚所有事情(最终......),但这次真的让我疯了,那么还有谁可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

将NSLog放入testing:,或者只是在那里放一个断点,看看number中存储了什么。

请注意self.number = [[NSNumber numberWithLong:[sender tag]] retain];是双重保留NSNumber对象(这是错误的),但这不会导致任何立即错误。