performSegueWithIdentifier:导致应用崩溃

时间:2014-03-26 16:59:34

标签: ios objective-c segue

我有一个用户输入电子邮件信息后按下的按钮。我有一个警报视图,当没有输入电子邮件但是如果我想让按钮转到另一个视图控制器时显示。

以下代码导致我的应用崩溃。我不知道为什么。请帮忙。

(注意:我已经尝试了#34;发件人:自己)""发件人:nil]""发件人:发件人]"他们都做了我的应用程序崩溃了。)

- (IBAction)nextButtonPushed:(id)sender {

    if ([self.emailTextField.text  isEqual: @""]) {

        emailAlertView = [[UIAlertView alloc] initWithTitle:@"Missing Email" message:@"A destination email is required to send." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [emailAlertView show];
        self.nextButton.enabled = NO;
    }

    else {

        eString = self.eTextField.text;
        hString = self.hField.text;
        emailAddress = self.emailTextField.text;

        [userDefaults setObject:eString forKey:@"e"];

        [userDefaults setObject:hString forKey:@"h"];

        [userDefaults setObject:emailAddress forKey:@"email"];

        [self performSegueWithIdentifier:@"next" sender:self];
    }

}

3 个答案:

答案 0 :(得分:4)

有三种可能的可能性:

  • 也许故事板真的没有名为" next"从FirstViewController场景中出现。小心:空格和大写以及类似的事情。

  • 也许故事板上有一个名为" next"但它来自不同的场景(不同的视图控制器)。

  • 您的代码中由self表示的FirstViewController实例可能与故事板中的FirstViewController实例不同,即它可能以某种其他方式存在而不是通过故事板中的实例化。你甚至可能在故事板中有两个FirstViewController对象,而segue来自另一个。

答案 1 :(得分:4)

找出你的应用程序在这样的行上崩溃的原因的一个好方法是禁用你可能拥有的任何断点(包括异常断点)。这将导致应用程序崩溃并经常告诉您崩溃的原因。通常情况下,你会得到像提到的@matt这样的错误,比如你的seques上的错误标识符(经常输入错误),IB场景中同一个对象的多个,如下所示:

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<YOURAPP.YOURVIEWCONTROLLER: 0x7c8951d0>) has no segue with identifier 'TheSequeIdentifierYouHaventSetYetOrTypedInWrong''

或者像我今天的情况一样,我收到了这个错误:

 Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<YOURAPP.YOURVIEWCONTROLLERYOUARETRYINGTOSHOW 0x78e5a140> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key "MyKeyOnTheOffendingObject"

一旦我知道我的故事板中有一个对象,它不应该让我所有的工作就是用坏的引用插座跟踪按钮/图像/其他随机对象已发送事件并且所有内容都已修复

通常performSequeWithIdentifier将作为崩溃前显示的最后一行显示,因为这是在呈现新视图控制器时发现问题之前的最后一行 - 所以如果您确定问题不是&#39 ;用你的seque然后检查你想要呈现的VC上的引用!

答案 2 :(得分:3)

如果视图控制器无法从NIB加载,也会发生崩溃。例如,如果存在错误命名的用户定义的运行时属性。

例如,QBFlatButton今天更改了他们的API,我的应用程序开始崩溃。这就是我们使用语义版本控制的原因: - )