编辑:问题已经解决,我将分配和启动变量转移到另一个方法中。 SubOtherClass
永远不会被启动(alloc
永远不会调用init
。
已重命名类以使此问题更加通用
假设课程OtherClass
延伸NSView
假设类SubOtherClass
扩展了假设类OtherClass
,并在ClassToUpdate
的本地实例中调用更新方法
我知道,当密钥被释放时更新视图并不是最好的想法,但这只是暂时的。我不是Obj-C的专家。要重复此问题,SubOtherClass
中的更新方法会被执行但不会在ClassToUpdate
中执行,并且该方法的内容(此处未显示)不会运行。我怎样才能解决这个问题?如果需要更多信息,请询问。
感谢。
编辑:完整代码(带有重命名的类)
部首:
#import "OtherClass.h"
#import "ThingToRender.h"
#import "ClassToUpdate.h"
@interface SubOtherClass : OtherClass
@property (assign) ThingToRender *thingToRender1, *thingToRender2;
@property (retain) ClassToUpdate *classToUpdate;
- (void) createVariables;
- (void) update;
@end
实现:
#import "SubOtherClass.h"
@implementation SubOtherClass
- (BOOL) acceptsFirstResponder{
return true;
}
- (void) createVariables{
self.classToUpdate = [[ClassToUpdate alloc] init];
self.thingToRender1 = [[ThingToRender alloc] init];
self.thingToRender2 = [[ThingToRender alloc] init];
}
- (void) keyUp:(NSEvent *)theEvent{
[super keyUp:theEvent];
[self setNeedsDisplay:true];
}
- (void) keyDown:(NSEvent *)theEvent{
[super keyDown:theEvent];
}
- (void) update{
[self.classToUpdate update:self];
}
- (void) drawRect:(NSRect)rect{
[super drawRect:rect];
[self update];
[[NSColor blackColor] set];
NSRectFill(rect);
[self.color1 set]; //this color is declared in superclass
NSString *str1 = [NSString stringWithFormat:@"%d %d %d %d", self.thingToRender1.x, self.thingToRender1.y, 30, 100];
NSRectFill(NSRectFromString(str1));
[self.color2 set]; //this color is declared in superclass
str1 = [NSString stringWithFormat:@"%d %d %d %d", self.thingToRender2.x, self.thingToRender2.y, 30, 100];
NSRectFill(NSRectFromString(str1));
[self.color3 set]; //this color is declared in superclass
str1 = [NSString stringWithFormat:@"%d %d %d %d", self.classToUpdate.x, self.classToUpdate.y, 30, 30];
NSRectFill(NSRectFromString(str1));
}
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
[self setNeedsDisplay:YES];
return self;
}
@end
OtherClass扩展了NSView
答案 0 :(得分:1)
执行时你确定self.classToUpdate
不是零吗?
也许你没有在任何地方初始化那个课程?
使用以下代码替换update
中的SubOtherClass
方法:
- (void) update{
if(!self.classToUpdate){
NSLog(@"classToUpdate is nil");
}
[self.classToUpdate update:self];
}
如果'classToUpdate为nil'文本出现,请在控制台上查看
答案 1 :(得分:0)
在您的drawrect方法中,只需包含以下行: -
[super drawrect:rect]
因此它调用超类drawrect方法
答案 2 :(得分:0)
我不确定导致问题的原因,我发现它很复杂,但我最终找到了解决方案。我将变量的构造函数移动到另一个方法,alloc
永远不会调用SubOtherClass
。无论如何,谢谢大家的帮助。