2011-08-26 82 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對象(這是錯誤的),但不應該導致任何直接的錯誤。