调用时方法不运行

时间:2013-11-01 10:39:21

标签: objective-c macos

编辑:问题已经解决,我将分配和启动变量转移到另一个方法中。 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

3 个答案:

答案 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。无论如何,谢谢大家的帮助。