gpt4 book ai didi

objective-c - 从子类访问父类(super class)属性

转载 作者:行者123 更新时间:2023-12-04 05:03:49 24 4
gpt4 key购买 nike

我在实现一个简单的 super /子类方案时遇到了一些麻烦。我在父类(super class)中声明了一个 NSMutableDictionary,并试图在子类中访问它,但它只返回 null。任何帮助将不胜感激。

@interface RootModel : NSObject <Updatable, TouchDelegate>
@property (nonatomic) NSMutableDictionary *gameValues;
@end

@interface SubclassModel : RootModel
@end

@implementation RootModel

- (id)initWithController:(id)controller {
if ((self = [super init])) {
_controller = controller;

_gameValues = [NSMutableDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat:300.0f], KEY_JUMP_VELOCITY,
[NSNumber numberWithFloat:49.47f], KEY_GRAVITY,
[NSNumber numberWithFloat:0.25f], KEY_JUMP_TIME_LIMIT,
nil];

NSLog(@"%@", _gameValues);

}
return self;
}

@implementation SubclassModel

- (id)init{
if ((self = [super init])) {
// This NSLog prints "(null)" if using super.gameValues or self.gameValues, why?
NSLog(@"subclass: %@", super.gameValues);

}
return self;
}
@end

我做错了什么?

最佳答案

正如 Catfish_Man 回答的那样,您的 init方法需要调用[super initWithController:] .但是,您的评论似乎显示了对类/父类(super class)继承模型的误解:

My superclass is initialized by another controller class. Any calls to the super's properties (which were initialized in initWithController:) are valid (they return values, not null).



当您创建 SubclassModel 的实例时那么该实例本身就有一个 RootModel实例。那个 RootModel实例不与 SubclassModel 的任何其他实例共享或 RootModel .

因此,如果“另一个 Controller 类”创建并初始化 RootModel 的实例,依次显示您的 NSLog输出,那么这与您的 SubclassModel 完全不同实例 - 和 RootModel这是您 SubclassModel 的一部分实例未初始化,因为您没有调用 [super initWithController:] , 因此你 NSLogSubclassModel显示 nil .

关于objective-c - 从子类访问父类(super class)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15770457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com