【问题标题】:Instance variable does not retain its value实例变量不保留其值
【发布时间】:2011-08-26 19:39:30
【问题描述】:

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

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

  • 创建了一个新项目
  • 添加了一个名为“TestClass”的 NSView 子类
  • 在 MainMenu.xib 的窗口中添加了类 TestClass 的视图
  • 在 MainMenu.xib 中为 TestClass 添加了一个对象
  • 在视图中添加了一个按钮并将其标签设置为 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: #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。

我通常会自己解决所有问题(最终......),但这次真的让我发疯了,那么有没有人可以帮助我?

【问题讨论】:

    标签: objective-c variables instance retain


    【解决方案1】:

    将 NSLog 放入 testing:,或者只是在此处放一个断点,然后查看 number 中存储的内容。

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

    【讨论】:

      最近更新 更多