0

编辑:问题已经解决,我将变量的分配和启动移到了另一种方法中。SubOtherClass永远不会被启动(alloc并且init永远不会被调用)。

类已被重命名以使这个问题更普遍。
假设类OtherClass扩展NSView
假设类SubOtherClass扩展了假设类OtherClass并在本地实例中调用更新方法ClassToUpdate 我知道在释放键时更新视图不​​是最好的想法,但这只是暂时的。我不是 Obj-C 方面的专家。重复这个问题,更新方法 inSubOtherClass被执行但不是 in 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

4

3 回答 3

1

您确定self.classToUpdate执行时不为零吗?也许您没有在任何地方初始化该类?

用以下代码替换update方法:SubOtherClass

- (void) update{
    if(!self.classToUpdate){
        NSLog(@"classToUpdate is nil");
    }

    [self.classToUpdate update:self];
}

如果出现“classToUpdate is nil”文本,请查看控制台

于 2013-11-01T10:50:15.087 回答
0

我不确定是什么导致了这个问题,我发现它很复杂,但我最终找到了解决方案。我将变量的构造函数移动到另一个方法,并且alloc从未调用过SubOtherClass. 无论如何感谢大家的帮助。

于 2013-11-05T19:28:57.807 回答
0

在你的drawrect方法中只包括这一行: -

        [super drawrect:rect]

使其调用超类drawrect方法

于 2013-11-01T10:49:15.010 回答