【问题标题】:setting SKScene delegate from viewcontroller, delegate not found从视图控制器设置 SKScene 委托,未找到委托
【发布时间】:2014-08-25 19:49:04
【问题描述】:

尝试从 SKScene 打开视图控制器。

发现https://stackoverflow.com/a/20072795/1686319 非常有用,但是在尝试从视图控制器设置委托时出现错误。

“SKScene”没有可见的@interface 声明选择器 'setDelegate:'

EABMyScene.h

#import <SpriteKit/SpriteKit.h>

@protocol EABMySceneDelegate <NSObject>
-(void)doSomething;
@end

@interface EABMyScene : SKScene {

}
@property (nonatomic, weak) id <EABMySceneDelegate> delegate;
@end

有什么想法吗?

更新:

EABViewController.h

#import <UIKit/UIKit.h>
#import <SpriteKit/SpriteKit.h>

@protocol ViewControllerDelegate <NSObject>
-(void) openTweetSheet;
@end

@interface EABViewController : UIViewController <ViewControllerDelegate>

@end

EABViewController.m

#import "EABViewController.h"
#import "EABMyScene.h"

@implementation EABViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

    // Create and configure the scene.
    SKScene * scene = [EABMyScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    [scene setDelegate:self];

    // Present the scene.
    [skView presentScene:scene];
}

-(void)openTweetSheet
{
    NSLog(@"Open Tweet Delegate Method");
}

EABMyScene.h

#import <SpriteKit/SpriteKit.h>

@interface EABMyScene : SKScene {

}

@property (nonatomic, weak) id <ViewControllerDelegate> delegate;

@end

错误:“SKScene”没有可见的@interface 声明选择器“setDelegate:”

【问题讨论】:

  • 投射到 (EABMyScene*)
  • 如果您尝试实现链接中的代码,则您在错误的位置定义了委托。它应该在您的视图控制器中,而不是您的 SKScene 子类中。
  • 我建议您重新阅读链接中的答案。 @protocol 定义应该在视图控制器的 .h 文件中,而不是在 EABMyScene.h 中。
  • 如果您发布您的更改,我会尝试找到问题。
  • 改变[场景setDelegate:self]; to [(EABMyScene *)scene setDelegate:self];

标签: objective-c delegates sprite-kit header-files


【解决方案1】:

SKScene 类没有名为delegate 的属性,所以声明

[scene setDelegate:self];

产生编译器错误。要解决此问题,请将场景投射到您的 SKScene 子类 EABMyScene:

[(EABMyScene *)scene setDelegate:self];

【讨论】:

  • 它将在 10.10 和 8.0 中有一个委托,所以要小心你现在的名字。
猜你喜欢
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 2016-06-10
  • 2018-01-01
相关资源
最近更新 更多