从视图控制器设置 SKScene 委托,未找到委托
Posted
技术标签:
【中文标题】从视图控制器设置 SKScene 委托,未找到委托【英文标题】:setting SKScene delegate from viewcontroller, delegate not found 【发布时间】:2014-08-25 19:49:04 【问题描述】:尝试从 SKScene 打开视图控制器。
发现https://***.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]; 【参考方案1】:SKScene 类没有名为delegate 的属性,所以声明
[scene setDelegate:self];
产生编译器错误。要解决此问题,请将场景投射到您的 SKScene 子类 EABMyScene:
[(EABMyScene *)scene setDelegate:self];
【讨论】:
它将在 10.10 和 8.0 中有一个委托,所以要小心你现在的名字。以上是关于从视图控制器设置 SKScene 委托,未找到委托的主要内容,如果未能解决你的问题,请参考以下文章