这证明我不了解一些基本原理,但它仍然是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'”。在创建对象的方法中执行相同操作......该怎么办?谢谢。
答案 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;
}