編輯:問題已解決,我將變量的分配和啓動移動到另一個方法中。 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
你確定'self.classToUpdate'被正確賦值(即不是'nil')嗎?順便說一句,名稱選擇不是很好:我猜,它不是一個類,而是一個對象。如果你想調用一個類,'update'應該是一個類方法(不是對象方法)。 – Matthias
這些名字只是個例子,它們不是我用過的真實名字,但下次我會嘗試使用更好的名字:) – Arc676