Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 实例变量不保留其值_Objective C_Variables_Instance_Retain - Fatal编程技术网

Objective c 实例变量不保留其值

Objective c 实例变量不保留其值,objective-c,variables,instance,retain,Objective C,Variables,Instance,Retain,我现在正在学习Objective-C,为了练习,我为OSX编写了一个简单的随机迷宫生成器,效果很好。接下来,我尝试添加更多与按钮的交互,但实例变量出现问题,因为它们没有保留我分配给它们的值。对于同一个问题,我遇到了多个问题,但这些问题的解决方案并没有解决我的问题。我还测试了简化版本的程序中是否存在相同的问题,确实如此 我想我做错了什么,但我不知道是什么。以下是我所做的: 创建了一个新项目 添加了一个名为TestClass的NSView子类 在MainMenu.xib的窗口中添加了一个类为Test

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

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

创建了一个新项目 添加了一个名为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: 导入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

通常情况下,我最终会自己解决所有问题…,但这一次,这真的让我发疯了,那么有人可以帮助我吗?

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

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