gpt4 book ai didi

ios - 从指定的初始化程序调用超静态方法

转载 作者:行者123 更新时间:2023-11-29 03:04:43 24 4
gpt4 key购买 nike

[SKNode 节点] 返回一个初始化节点。 ( https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKNode_Ref/Reference/Reference.html#//apple_ref/occ/clm/SKNode/node )

如果我子类化 SKNode:

@interface MyClass : SKNode

然后在 MyClass 内的指定初始化程序中调用 super 指定初始化程序(类方法)。

@implementation MyClass
{
MyScene _MyScene;
}

- (instancetype)initWithScene:(MyScene *)myScene
{
_MyScene = myScene;
if (self = [SKNode node]) { // HERE I GET ERROR
}
return self;

}

错误:将赋值结果用作不带括号的条件如果我将其更改为:

if ((self = [SKNode node]))

我得到:从 (SKNode *) 分配给 (MyClass *) 的不兼容指针类型如果它是类方法,调用 super 指定初始化程序的方法是什么?我也试过调用 self = (MyClass *)[SKNode node] 但我得到一个奇怪的错误。

最佳答案

I get: incompatible pointer types assigning to (MyClass *) from (SKNode *)

问题是 [SKNode node]SKNode 的实例中分配和初始化,这意味着您没有机会将该对象转换为实例你自己的子类。你得到不兼容的指针错误,因为你试图将 SKNode * 分配给 self,它是 MyClass * 类型。

相反,您需要自己进行分配,以便在父类(super class)完成初始化后为您的实例变量留下足够的空间。所以,做类似的事情:

self = [super init];
if (self) {
//...
}

I also tried calling self = (MyClass *)[SKNode node] but i get an strange error.

这基本上是同一个问题。将 [SKNode node] 转换为类型 MyClass * 不会改变对象本身是 SKNode 实例的事实,而不是我的类。同样,您需要创建一个 MyClass 实例(使用 +alloc),然后调用父类(super class)的 (SKNode) 初始化器,并且 然后 执行MyClass 初始化。

关于ios - 从指定的初始化程序调用超静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22914796/

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