我不是一个完整的n00b,但我觉得我必须遗漏一些必要的东西。我通过类的init方法将一个变量传递给一个新的类实例:
@synthesize side;
- (id)initWithSide:(NSString *)aSide frame:(NSRect)frameRect
{
if (self = [super initWithFrame:(NSRect)frameRect]) {
self.side = aSide;
}
NSLog(@"Side is %@", self.side);
return self;
}
NSLog()的输出确实在这里显示正确的值。现在,drawRect:方法然后被触发以绘制视图,具有类似的调用:
- (void)drawRect:(NSRect)rect
{
NSLog(@"Side is %@", self.side);
这次NSLog()报告Side为零!使用调试器逐步执行它,我看到side的值被设置,然后它进入寄存器(所有那些我不理解的十六进制代码),然后当它再次跳转到drawRect:方法时,值为简直没有。
如果有人能说清楚这一点,我会很感激!
干杯, 亚伦
答案 0 :(得分:2)
这通常是为NSString *编写属性的方法。 assign用于基本类型(它不会增加对象的保留计数),并保留或复制对象。
@property (readwrite, copy) NSString * side
答案 1 :(得分:1)
我将继续猜测这种错误的最常见原因:你正在处理两个不同的对象。您正在初始化代码中的视图和您还在nib中有一个实例。这两个实例是完全独立的对象,因此当可见的视图执行其drawRect:时,它不会看到另一个实例变量。
其他人指出你的财产问题也是肯定的,但我怀疑这个错误实际上是隐藏了那个。