2011-08-26 83 views
1

我正在学习Objective-C,为了练习,我为OS X编写了一个简单的随机迷宫生成器,该工具正常工作。接下来,我尝试添加更多与按钮的交互,但是我遇到了实例变量的问题,因为它们不保留我赋值的值。我遇到了关于同一问题的多个问题,但解决方案并没有解决我的问题。我也测试过,如果相同的问题仍然存在于程序的简化版本中,那么它会这样做。实例变量不保留其值

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

  • 创建一个新的项目
  • 添加一个NSView的子类,称为“TestClass的”
  • 添加在MainMenu.xib
  • 增加了一个对象在窗口类TestClass的景色识别TestClass在MainMenu.xib
  • 添加一个按钮视图,并设置其标签1
  • 添加以下代码来TestClass.h和TestClass.m以及连接在按钮将其:

TestClass.h: #进口

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

@property (nonatomic, retain) NSNumber *number; 


@property (assign) IBOutlet NSButton *test; 

- (IBAction)testing:(id)sender; 

@end 

TestClass.m: #进口 “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几次。

我通常自己弄清楚所有事情(最终......),但是这一次真的让我发疯,所以有人能帮助我吗?

回答

0

把NSLog放入testing:,或者只是在那里放一个断点,看看存储在number中的内容。

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