0

我在 Xcode 中需要一些帮助。我收到错误 Thread 1: SIGABRT 它指向 main.m 文件。我设置了异常断点,它仍然在 main.m 文件中停止。

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

#import "AppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

那是我在 main.m 文件中的代码。有人可以帮我解决这个错误。

完整的错误是:

2013-09-07 23:41:05.440 save the jewel 5[86090:c07] -[game pause:]: unrecognized selector sent to instance 0x845ece0
2013-09-07 23:41:09.460 save the jewel 5[86090:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[game pause:]: unrecognized selector sent to instance 0x845ece0'
*** First throw call stack:
(0x1693012 0x13a0e7e 0x171e4bd 0x1682bbc 0x168294e 0x13b4705 0x2e82c0 0x2e8258 0x3a9021 0x3a957f 0x3a86e8 0x317cef 0x317f02 0x2f5d4a 0x2e7698 0x26f5df9 0x26f5ad0 0x1608bf5 0x1608962 0x1639bb6 0x1638f44 0x1638e1b 0x26f47e3 0x26f4668 0x2e4ffc 0x23c2 0x22f5)
libc++abi.dylib: terminate called throwing an exception

在我的 game.m 文件中,我有:

-(void)pauseLayer:(CALayer*)layer{
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
    layer.speed = 0.0;
    layer.timeOffset = pausedTime;
}

-(void)resumeLayer:(CALayer*)layer{
    CFTimeInterval pausedTime = [layer timeOffset];
    layer.speed = 1.0;
    layer.timeOffset = 0.0;
    layer.beginTime = 0.0;
    CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
    layer.beginTime = timeSincePause;
}


- (IBAction)pause:(id)sender {
    [self pauseLayer:self.view.layer];

}

- (IBAction)resume:(id)sender {
    [self resumeLayer:self.view.layer];
}

在我的 game.h 文件中,我有:

- (IBAction)pause:(id)sender;
- (IBAction)resume:(id)sender;


-(void)pauseLayer:(CALayer*)layer;
-(void)resumeLayer:(CALayer*)layer;

我需要一些帮助。

4

1 回答 1

2

-[game pause:]: unrecognized selector sent to instance 0x845ece0

这意味着您有一个game类的实例(顺便说一句,该类应该是Game,而不是game,类是大写的)并且某些东西正在调用pause:该类的方法,但没有pause:方法。

鉴于该类已被调用Game(已修复)并且暂停似乎是对游戏执行的合理操作,因此这不太可能是过度发布问题。 pause:似乎您可能在界面生成器中连接了一个按钮。

您是否将方法重命名为pause:其他名称(pauseGame:?)而不修复 IB 中的连接?


pause:实施是否在@implementation Game范围内?如果是这样,请尝试清理项目并重建,因为可能存在依赖性问题。如果不是,那是你的问题。

如果从干净的东西构建不起作用,那么就会缺少一些细节。由于从 clean 构建不起作用,因此您必须发布更多详细信息。至少显示类的声明。

于 2013-09-08T15:44:50.120 回答