Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 目标C中的遗传_Iphone_Objective C - Fatal编程技术网

Iphone 目标C中的遗传

Iphone 目标C中的遗传,iphone,objective-c,Iphone,Objective C,我有一个主要的游戏类,它使用OpenGL渲染游戏。现在我想我可以继承这个类,然后在它的init方法中调用[super init]来获取它的副本。计划是对副本进行一些修改,但似乎这不起作用 下面是我的类的头文件: #import "GameView.h" @interface CloneView : GameView { } -(id)initWithFrame:(CGRect)frame; @end 这是克隆视图类: @implementation CloneView -(id)i

我有一个主要的游戏类,它使用OpenGL渲染游戏。现在我想我可以继承这个类,然后在它的init方法中调用
[super init]
来获取它的副本。计划是对副本进行一些修改,但似乎这不起作用

下面是我的类的头文件:

#import "GameView.h"


@interface CloneView : GameView {

}

-(id)initWithFrame:(CGRect)frame;

@end
这是克隆视图类:

@implementation CloneView

-(id)initWithFrame:(CGRect)frame{
    return [super initWithFrame:frame];
}

@end
如果我在GameView类的init方法中设置了一个断点,它就会停在那里。问题是:我的克隆视图没有渲染,屏幕保持黑色。 我错过了什么?谢谢你的帮助

编辑 记录在案:我在没有实现
initFrame
的情况下进行了尝试,得到了相同的结果。(正如预期的那样,上面的
initFrame
除了调用super之外没有做任何事情)

编辑2
我正在将我的克隆添加到另一个视图,因此我正在创建两个Eagle上下文。这可能是它不起作用的原因吗?

如果您不在
CloneView
init
函数中添加任何内容,那么您甚至不必重写它。你可以让你的类继承自
GameView
,它会自动复制它的
init
函数。

这是来自苹果的

您应该将self分配给初始值设定项返回的值,因为初始值设定项可能返回与原始接收方返回的对象不同的对象

所以试着这样做

-(id)initWithFrame:(CGRect)frame{
    if(self = [super initWithFrame:frame] ) {
         //Do whatever you need to do here. 
    }
    return self;
 }

如果您需要在init方法中执行某些操作,这将解决您的问题。否则,您可以完全跳过init方法

试着这样做,可能会奏效

返回(self=[super initWithFrame:frame]) 这可确保将超类方法正确复制到当前方法


TNQ

我终于找到了问题:

我需要编写第二个init方法。问题是以下代码执行了两次:

CAEAGLLayer *eaglLayer = (CAEAGLLayer *)[super layer];
[eaglLayer setOpaque:YES];
m_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
if (!m_context || ![EAGLContext setCurrentContext:m_context]) {
    printf("FAIL \n");
    [self release];
    return nil;
}
[Textures loadTexture];
    if ([self createFramebuffer]) {
    [self draw];
}
此代码位于game类的
initFrame
方法中。我创建了第二个不执行此代码的init方法。相反,此代码在克隆的父视图类中执行。现在它工作了,耶!!
谢谢你试着帮助我

你发布的代码似乎没问题。。问题不在于继承。。。如果直接使用,您的“GameView”渲染是否正确???您发布的代码没有问题,我认为您需要进一步解释。@lukya:是的,如果直接使用,游戏显示效果很好!这就是我有点困惑的原因。谢谢,我先试过了,但也没用!有点不对劲,但我不知道是什么。