【发布时间】:2014-09-15 22:37:11
【问题描述】:
直到最近,当 Sprite Scene 在“return self;”后开始崩溃时,我的应用程序一直运行良好。它会在“以 NSException 类型的未捕获异常终止”之前显示错误“-[BEGameScene setDelegate:]: unrecognized selector sent to instance 0x10040de10'”,这个错误似乎只发生在设备上; ios模拟器运行良好。
奇怪的是,该错误似乎不在我的代码中。我拿了一个旧的,仍在工作的版本,直接从 finder 复制它,当我运行它时它也崩溃了。
会不会是 Xcode 6(我最近下载的)有问题?
提前致谢
编辑:
抱歉,这里是代码
#import "BEGameScene.h"
#import "AppDelegate.h"
#import <UIKit/UIKit.h>
#import <SpriteKit/SpriteKit.h>
@interface BEMainGameViewController : UIViewController <BEGameSceneDelegate>
@property (nonatomic, assign) id <BEGameSceneDelegate> delegate;
@end
#import "BEMainGameViewController.h"
#import "BEGameScene.h"
@interface BEMainGameViewController ()
@property (strong, nonatomic) IBOutlet UIPanGestureRecognizer *control;
@end
@implementation BEMainGameViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Configure the view.
SKView *skView = (SKView *)self.view;
skView.showsFPS = NO;
skView.showsNodeCount = NO;
// Create and configure the scene.
BEGameScene *scene = [BEGameScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
scene.delegate = self;
// Present the scene.
[skView presentScene:scene];
[self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"Background 1.tiff"]]];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)unwindFromGame {
[self performSegueWithIdentifier:@"unwindFromGameScene" sender:self];
}
@end
#import <SpriteKit/SpriteKit.h>
@protocol BEGameSceneDelegate <NSObject>
-(void)unwindFromGame;
@end
@interface BEGameScene : SKScene <UIGestureRecognizerDelegate>
@property (weak, nonatomic) id <BEGameSceneDelegate> delegate;
@end
#import "BEMainGameViewController.h"
#import "BEGameScene.h"
#import "AppDelegate.h"
@implementation BEGameScene {
NSArray *location;
int x_flower;
int x_Trap1;
int x_Trap2;
int randNum;
int speed;
int score;
int life;
BOOL rad;
BOOL collide;
NSInteger interval;
SKSpriteNode *sprite_bee;
SKSpriteNode *sprite_flower;
SKSpriteNode *sprite_flyTrap;
SKSpriteNode *sprite_flyTrap2;
SKSpriteNode *sprite_rad;
SKSpriteNode *sprite_radGlow;
NSTimer *timer;
SKLabelNode *youLoseLabel;
SKLabelNode *instruction;
NSString *scoreText;
NSString * honey;
}
-(id)initWithSize:(CGSize)size {
life = 1;
if (self = [super initWithSize:size]) {
/* Setup your scene here */
//self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0];
SKSpriteNode *bgImage = [SKSpriteNode spriteNodeWithImageNamed:@"BGImage"];
bgImage.position = CGPointMake(self.size.width/2, self.size.height/2);
[self addChild:bgImage];
//Bee movement
SKTexture *texture1 = [SKTexture textureWithImageNamed:@"Bee up.tiff"];
SKTexture *texture2 = [SKTexture textureWithImageNamed:@"Bee down.tiff"];
SKTexture *texture3 = [SKTexture textureWithImageNamed:@"Flower.tiff"];
SKTexture *texture4 = [SKTexture textureWithImageNamed:@"Fly Trap.tiff"];
SKTexture *texture5 = [SKTexture textureWithImageNamed:@"radiation.png"];
SKTexture *texture6 = [SKTexture textureWithImageNamed:@"rad glow.png"];
sprite_bee = [SKSpriteNode spriteNodeWithTexture:texture1];
sprite_bee.position = CGPointMake(160, 100);
sprite_bee.zPosition = 100;
sprite_bee.size = CGSizeMake(110, 110);
SKAction *fly = [SKAction animateWithTextures:@[texture1,texture2] timePerFrame:.2];
[sprite_bee runAction:[SKAction repeatActionForever:fly]];
[self addChild:sprite_bee];
collide = NO;
//Plant creation
speed = 100;
score = 0;
x_flower = 40;
x_Trap1 = 160;
x_Trap2 = 280;
sprite_radGlow = [SKSpriteNode spriteNodeWithImageNamed:@"rad glow.png"];
sprite_radGlow.position = CGPointMake(100,3000);
sprite_radGlow.size = CGSizeMake(140, 140);
sprite_radGlow.zPosition = 50;
SKAction *glow = [SKAction sequence:@[
[SKAction fadeOutWithDuration:.5],
[SKAction fadeInWithDuration:.5],
]];
[sprite_radGlow runAction:[SKAction repeatActionForever:glow]];
[self addChild: sprite_radGlow];
sprite_flower = [SKSpriteNode spriteNodeWithTexture:texture3];
sprite_flower.position = CGPointMake(40, 300);
sprite_flower.size = CGSizeMake(100, 100);
[self addChild:sprite_flower];
sprite_flyTrap = [SKSpriteNode spriteNodeWithTexture:texture4];
sprite_flyTrap.position = CGPointMake(160, 300);
sprite_flyTrap.size = CGSizeMake(100, 100);
[self addChild:sprite_flyTrap];
sprite_flyTrap2 = [SKSpriteNode spriteNodeWithTexture:texture4];
sprite_flyTrap2.position = CGPointMake(280, 300);
sprite_flyTrap2.size = CGSizeMake(100, 100);
[self addChild:sprite_flyTrap2];
sprite_rad = [SKSpriteNode spriteNodeWithTexture:texture5];
sprite_rad.position = CGPointMake(160, 3000);
sprite_rad.size = CGSizeMake(500, 100);
[self addChild:sprite_rad];
}
return self;
}
@end
【问题讨论】:
-
显示一些相关代码。并展示如何在
BEGameScene类上声明delegate属性。 -
也许您应该向我们展示异常堆栈跟踪,并为我们提供一些有关如何构建应用程序的线索。并查看您在
setDelegate进行的所有地方。
标签: ios objective-c xcode xcode6