程序因未知原因崩溃

Posted

技术标签:

【中文标题】程序因未知原因崩溃【英文标题】:Program crashing for unknown reason 【发布时间】:2013-03-30 16:59:28 【问题描述】:

我无法弄清楚为什么会发生此错误。我已经坚持了好几天了。 我有一个名为 ADViewController 的 VC,它显示来自 plist 文件的问题。它有自己的类,是 ViewController 的子类,而不是 UIViewController(这可能值得一提)。我很难执行Segue“LevelCleared”,这是它自己的类ClearedAd1ViewController。如果这是一个愚蠢的问题,我深表歉意,但我自己无法弄清楚。 这是 ADViewController.m

- (void)viewDidLoad

[super viewDidLoad];
rootArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Addition1" ofType:@"plist"]];
currentQuestion = -1;
[self showNextQuestion];


-(void) showNextQuestion
currentQuestion++;
if (currentQuestion <= 2) 

    int numItems = [rootArray count];
    NSMutableArray *question = [NSMutableArray arrayWithCapacity:numItems];
    NSMutableArray *A = [NSMutableArray arrayWithCapacity:numItems];
    NSMutableArray *B = [NSMutableArray arrayWithCapacity:numItems];
    NSMutableArray *C = [NSMutableArray arrayWithCapacity:numItems];
    NSMutableArray *addimage = [NSMutableArray arrayWithCapacity:numItems];
    NSMutableArray *Answer = [NSMutableArray arrayWithCapacity:numItems];


    for (NSDictionary *itemData in rootArray) 
        [question addObject:[itemData objectForKey:@"question"]];
        [A addObject:[itemData objectForKey:@"A"]];
        [B addObject:[itemData objectForKey:@"B"]];
        [C addObject:[itemData objectForKey:@"C"]];
        [addimage addObject:[itemData objectForKey:@"ImageUse"]];
        [Answer addObject:[itemData objectForKey:@"ANS"]];

    
    self.questionasked.text = question[currentQuestion];
    self.answer1.text = A[currentQuestion];
    self.answer2.text = B[currentQuestion];
    self.answer3.text = C[currentQuestion];
    additionImage.image = [UIImage imageNamed:addimage[currentQuestion]];
    self.correctAns = Answer[currentQuestion];
else
    NSLog(@"End of Array ");
    [self performSegueWithIdentifier:@"LevelCleared" sender:nil];



我会将 NSLog 消息写入控制台,但不会执行 Segue。当它到达数组中的第 3 项时,我想执行 segue,但我一直收到此错误

 2013-03-30 16:37:15.912 thefyp[1268:c07] End of Array 
2013-03-30 16:37:15.915 thefyp[1268:c07] -[ClearedAd1ViewController setCurrentQuestion:]: unrecognized selector sent to instance 0x757fcd0
2013-03-30 16:37:15.916 thefyp[1268:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ClearedAd1ViewController setCurrentQuestion:]: unrecognized selector sent to instance 0x757fcd0'
***First throw call stack:
 (0x1cb8012 0x10f5e7e 0x1d434bd 0x1ca7bbc 0x1ca794e 0x834b 0x481b87 0x11bdd2 0x8f87 0x9050 0x1109705 0x3d2c0 0x3d258 0xfe021 0xfe57f 0xfd6e8 0x6ccef 0x6cf02 0x4ad4a 0x3c698 0x1c13df9 0x1c13ad0 0x1c2dbf5 0x1c2d962 0x1c5ebb6 0x1c5df44 0x1c5de1b 0x1c127e3 0x1c12668 0x39ffc 0x2a8d 0x29b5 0x1)
 libc++abi.dylib: terminate called throwing an exception

(lldb)

【问题讨论】:

你的概念完全错了。我不会在这篇文章中冒险。 ClearedAd1ViewController 没有实现 setCurrentQuestion: 检查您的ClearedAd1ViewController.m 文件。方法setCurrentQuestion:尚未实现。 那么我要在 ClearedAd1ViewController.m 中声明一个方法setCurrentQuestion 吗?究竟要进入那个方法是什么? 我要做的就是在当前问题等于 2 时执行那个 segue???? 正如我所说,你的概念全错了。向您解释这一点超出了 *** 的范围。请阅读一些初学者教程和文档以了解更多信息。您在代码中的某处调用 setCurrentQuestion:,但 ClearedAd1ViewController 没有实现它。 【参考方案1】:

我认为您非常困惑我认为您想说的是 ADViewController 是 UIView 的子类而不是 ViewController 类。在这种情况下

[self performSegueWithIdentifier:@"LevelCleared" sender:nil];

不能被调用,因为它是视图控制器方法而不是 UIView 方法。 这就是错误提示选择器被识别的原因。

因此,您需要在 UIView 控制器中实现代码来解决此问题。

【讨论】:

非常感谢您的回复。这是 ADViewController.h @interface LevelAViewController : ViewController 所以应该是 @interface LevelAViewController : UIViewController 是的,应该。我建议创建一个 UIViewController 类型的新类,然后将您的代码放入其中。确保移动代码的任何错误都已修复,然后最后检查您是否已在界面生成器中将标识符正确设置为 LevelCleared。 哇,它似乎仍然无法正常工作Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController setCurrentQuestion:]: unrecognized selector sent to instance 0x71c4e90' 尝试将发件人设置为自己。 恐怕不会……我真的不知道!无论如何我可以把项目发给你!也许我错过了什么

以上是关于程序因未知原因崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Play 项目中的简单 SBT 模块导致 Play 因未知原因而崩溃 - play 2.1

Android:应用程序由于未知原因而崩溃

Silverlight 应用程序因未知原因停止工作(未更改服务器或代码)

iOS Objective-C 应用程序因异常原因崩溃

Flutter ios 构建失败 - Distill 因未知原因而失败

iOS 应用程序因终止原因而崩溃:命名空间 SPRINGBOARD,代码 0x8badf00d