在initWithFrame方法中创建的对象在同一个类的另一个方法中不知道

时间:2013-02-24 20:57:00

标签: objective-c macos object nsview

这证明我不了解一些基本原理,但它仍然是OO的第一周! ;)

在我的视图类中,此对象是在initWithFrame方法中创建的:

- (id)initWithFrame:(NSRect)frame{
    self = [super initWithFrame:frame];
    if (self)
{
    SeqModel *seq1 = [[SeqModel alloc] init];
    [seq1 setSeqSteps:16];
    [seq1 setSeqPatterns:1];
    [seq1 setName:@"Load sample here"];
    }
    return self;
}

后来又用另一种方法打电话:

- (void)drawSampleNameSeq1{
    NSLog(@"%@",[seq1 sampleName]);
    [self drawText:[seq1 sampleName] schrift:@"Helvetica Light" r:140 g:140 b:140 tsize:15     xpos:1005 ypos:755 ];
}

然后编译器说:“使用未声明的标识符'seq1'”。在创建对象的方法中执行相同操作......该怎么办?谢谢。

1 个答案:

答案 0 :(得分:1)

问题在于变量scope。您声明的变量仅在大括号内具有范围或生命,因此它不适用于其他方法。

解决方案

创建一个实例变量:一个在类中无处可访问的变量。

你的.h

中的

@interface ClassName : SuperClass {
   SeqModel *seq1;
}

然后在initWithFrame:方法

- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        seq1 = [[SeqModel alloc] init];
        [seq1 setSeqSteps:16];
        [seq1 setSeqPatterns:1];
        [seq1 setName:@"Load sample here"];
    }
    return self;
}