78

我正在创建一个登录来查看支持票。第一个视图是工单视图,如果您未登录,则会将您推送到登录屏幕。但是我收到了这个:

支持 [3209:18e03] * 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合键 LoginScreen 的键值编码。” *

First throw call stack: (0x1f17012 0x1634e7e 0x1f9ffb1 0x10e1711 0x1062ec8 0x10629b7 0x108d428 0x7990cc 0x1648663 0x1f1245a 0x797bcf 0x65ce37 0x65d418 0x65d648 0x65d882 0x669235 0x8683d2 0x6664f3 0x666777 0x6667b7 0x9d1fe2 0x9c3ad9 0x65e422 0x2b15 0x65f753 0x65fb2f 0x661286 0x65fe3f 0x592910 0x592895 0x5926e5 0x1edfafe 0x1edfa3d 0x1ebd7c2 0x1ebcf44 0x1ebce1b 0x22aa7e3 0x22aa668 0x57c65c 0x1f0d 0x1e35) libc+ +abi.dylib: 终止调用抛出异常

这是我的 LoginScreen.m 代码

#import "UIAlertView+error.h"
#import "LoginScreen.h"
#import "API.h"
#include <CommonCrypto/CommonDigest.h>

#define sayWhat @"REMOVEDFORSECURITY"


@implementation LoginScreen

-(void)viewDidLoad {
    NSLog(@"Found me!");
    [super viewDidLoad];


    //focus on the username field /show keyboard
    [fldUsername becomeFirstResponder];
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
        // Return YES for supported orientations
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }

    -(IBA

ction)btnLoginRegisterTapped:(UIButton*)sender {
    if (fldUsername.text.length < 4 || fldPassword.text.length < 4){
        [UIAlertView error:@"Enter username and password over 4 chars each."];
        return;
    }

    //very basic encryption called "salting"
    NSString* saltedPassword = [NSString stringWithFormat:@"%@%@", fldPassword.text, sayWhat];

    //prep the hashed storage
    NSString* hashedPassword = nil;
    unsigned char hashedPasswordData[CC_SHA1_DIGEST_LENGTH];

    //actually hash this
    NSData *data = [saltedPassword dataUsingEncoding: NSUTF8StringEncoding];
    if (CC_SHA1([data bytes], [data length], hashedPasswordData)){
        hashedPassword = [[NSString alloc] initWithBytes:hashedPasswordData length:sizeof(hashedPasswordData) encoding:NSASCIIStringEncoding];
        } else {
            [UIAlertView error:@"Password can't be sent"];
                return;
        }

    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
        fldUsername.text, @"username",
                                   hashedPassword, @"password", nil];
    //here is the web call finally!
    [[API sharedInstance] commandWithParams:params
                               onCompletion:^(NSDictionary *json){
        //returned result
       NSDictionary* res = [[json objectForKey:@"result"] objectAtIndex:0];

        if([json objectForKey:@"error"]==nil && [[res objectForKey:@"userid"] intValue]> 0) {
                                       //success
        } else {
                                       //error'
        [UIAlertView error:[json objectForKey:@"error"]];
                                   }

    }];


}
@end

和 LoginScreen.h

#import <UIKit/UIKit.h>

@interface LoginScreen : UIViewController {
//the login form fields
IBOutlet UITextField* fldUsername;
IBOutlet UITextField* fldPassword;

}

//action for when either button is pressed
-(IBAction)btnLoginRegisterTapped:(id)sender;

@end


    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="2844" systemVersion="12C60" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="A8c-eR-geg">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="1930"/>
    </dependencies>
    <scenes>
        <!--Tickets View - View Tickets-->
        <scene sceneID="aIJ-Wx-2Yy">
            <objects>
                <viewController title="View Tickets" id="T0P-Bi-31w" customClass="TicketsView" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="4zZ-I2-ltX">
                        <rect key="frame" x="0.0" y="64" width="320" height="504"/>
                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                        <subviews>
                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="You Made It" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Fbu-Sr-Mgf">
                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstItem="Fbu-Sr-Mgf" firstAttribute="top" secondItem="4zZ-I2-ltX" secondAttribute="top" constant="138" id="QBp-qM-fKP"/>
                            <constraint firstItem="Fbu-Sr-Mgf" firstAttribute="leading" secondItem="4zZ-I2-ltX" secondAttribute="leading" constant="115" id="goO-5h-RZK"/>
                        </constraints>
                    </view>
                    <navigationItem key="navigationItem" id="vu4-JX-C3v"/>
                    <simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
                    <connections>
                        <segue destination="TOB-FA-Ss4" kind="modal" identifier="ShowLogin" id="dJH-ge-8CV"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="aSa-2G-5fx" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-518" y="-841"/>
        </scene>
        <!--Login Screen - Login-->
        <scene sceneID="6iZ-QL-7ID">
            <objects>
                <viewController title="Login" id="TOB-FA-Ss4" customClass="LoginScreen" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="w9e-4U-cwC">
                        <rect key="frame" x="0.0" y="64" width="320" height="504"/>
                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                        <subviews>
                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Blue Label Hosting Login" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="SuD-JI-L2T">
                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Username" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="NeI-zB-U8Y">
                                <constraints>
                                    <constraint firstAttribute="height" constant="31" id="BlH-cG-Jdh"/>
                                    <constraint firstAttribute="width" constant="208" id="Osb-tj-fjn"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <textInputTraits key="textInputTraits"/>
                            </textField>
                            <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Password" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="4Fi-NX-kli">
                                <constraints>
                                    <constraint firstAttribute="height" constant="31" id="X3j-X2-ton"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <textInputTraits key="textInputTraits" secureTextEntry="YES"/>
                            </textField>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5o5-83-KbW">
                                <constraints>
                                    <constraint firstAttribute="height" constant="36" id="Afu-6h-uru"/>
                                    <constraint firstAttribute="width" constant="161" id="Ef5-df-Jmp"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
                                <state key="normal" title="Login">
                                    <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
                                    <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
                                </state>
                                <state key="highlighted">
                                    <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                                </state>
                                <connections>
                                    <action selector="btnLoginRegisterTapped:" destination="w9e-4U-cwC" eventType="touchUpInside" id="Wgb-L8-sAJ"/>
                                </connections>
                            </button>
                        </subviews>
                        <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
                        <constraints>
                            <constraint firstItem="NeI-zB-U8Y" firstAttribute="top" secondItem="SuD-JI-L2T" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="0Pv-zM-WId"/>
                            <constraint firstItem="4Fi-NX-kli" firstAttribute="top" secondItem="NeI-zB-U8Y" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="2Sw-m8-LND"/>
                            <constraint firstItem="4Fi-NX-kli" firstAttribute="trailing" secondItem="NeI-zB-U8Y" secondAttribute="trailing" type="default" id="88O-VQ-qut"/>
                            <constraint firstItem="SuD-JI-L2T" firstAttribute="centerX" secondItem="NeI-zB-U8Y" secondAttribute="centerX" type="default" id="Qu9-PG-YWz"/>
                            <constraint firstItem="4Fi-NX-kli" firstAttribute="centerX" secondItem="5o5-83-KbW" secondAttribute="centerX" type="default" id="RAm-sI-Z3u"/>
                            <constraint firstItem="5o5-83-KbW" firstAttribute="top" secondItem="w9e-4U-cwC" secondAttribute="top" constant="128" id="UTG-NS-bx4"/>
                            <constraint firstItem="SuD-JI-L2T" firstAttribute="top" secondItem="w9e-4U-cwC" secondAttribute="top" constant="20" symbolic="YES" type="default" id="iaC-Ex-EBa"/>
                            <constraint firstItem="SuD-JI-L2T" firstAttribute="centerX" secondItem="w9e-4U-cwC" secondAttribute="centerX" type="default" id="oWP-Gp-Pi5"/>
                            <constraint firstItem="4Fi-NX-kli" firstAttribute="leading" secondItem="NeI-zB-U8Y" secondAttribute="leading" type="default" id="oxE-WD-fVc"/>
                        </constraints>
                        <connections>
                            <outlet property="fldPassword" destination="4Fi-NX-kli" id="4eb-YW-8YI"/>
                            <outlet property="fldUsername" destination="NeI-zB-U8Y" id="Ds4-XS-iqW"/>
                        </connections>
                    </view>
                    <simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="FL3-Yk-JbH" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-84" y="-349"/>
        </scene>
        <!--Navigation Controller-->
        <scene sceneID="fJ6-wq-4Tj">
            <objects>
                <navigationController id="A8c-eR-geg" sceneMemberID="viewController">
                    <toolbarItems/>
                    <navigationBar key="navigationBar" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="bnk-dD-E4j">
                        <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <nil name="viewControllers"/>
                    <connections>
                        <segue destination="T0P-Bi-31w" kind="relationship" relationship="rootViewController" id="3jA-WY-c3V"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="lTO-TW-owb" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-971" y="-910"/>
        </scene>
    </scenes>
    <classes>
        <class className="LoginScreen" superclassName="UIViewController">
            <source key="sourceIdentifier" type="project" relativePath="./Classes/LoginScreen.h"/>
            <relationships>
                <relationship kind="action" name="btnLoginRegisterTapped:"/>
                <relationship kind="outlet" name="fldPassword" candidateClass="UITextField"/>
                <relationship kind="outlet" name="fldUsername" candidateClass="UITextField"/>
            </relationships>
        </class>
        <class className="NSLayoutConstraint" superclassName="NSObject">
            <source key="sourceIdentifier" type="project" relativePath="./Classes/NSLayoutConstraint.h"/>
        </class>
        <class className="TicketsView" superclassName="UIViewController">
            <source key="sourceIdentifier" type="project" relativePath="./Classes/TicketsView.h"/>
        </class>
    </classes>
    <simulatedMetricsContainer key="defaultSimulatedMetrics">
        <simulatedStatusBarMetrics key="statusBar"/>
        <simulatedOrientationMetrics key="orientation"/>
        <simulatedScreenMetrics key="destination" type="retina4"/>
    </simulatedMetricsContainer>
</document>
4

20 回答 20

280

这种莫名其妙的异常通常是xib文件不干净的结果。在 xcode 中打开xib,选择 File's Owner 并单击“Connection Inspector”(右上箭头),一次查看所有出口。寻找!s 表示缺少出口。

于 2012-12-10T00:14:32.817 回答
38

在 Interface Builder 中检查您的连接。您可能指的是不存在的IBOutletIBAction.

于 2012-12-10T00:11:04.963 回答
34

看

多谢你们。我通过您的帮助解决了这个问题。所以,我希望这个截图对有同样问题的人有所帮助。

于 2013-04-12T01:47:03.297 回答
27

转到 Xcode 的断点选项卡。使用底部的按钮添加异常断点。现在您将看到调用 setValue:forKey: 和相关堆栈的代码。运气好的话,你会直接指出问题的根源。

奇怪的是您的课程是 LoginScreen,但错误是说有人使用“LoginScreen”作为键。检查 LoginScreen.m 是否是您的目标的一部分。

在此处输入图像描述


脚注:使用 Swift 时,如果您更改类的名称(因此,您在代码中的任何位置重命名它),就会出现一个常见问题。Storyboard 在这方面遇到了困难,您通常必须重新拖动涉及该类的任何连接。特别是,在右侧的 IdentityInspector 选项卡中的任何位置重新输入类的名称。(在图片示例中,我故意拼错了类名。但是当你重命名一个类时,同样的事情经常发生;即使它在 IdentityInspector 中看起来是正确的,你也需要再次输入名称;它会正确地自动完成,你很好去。)

于 2012-12-11T02:25:02.183 回答
24

我在创建自定义 TableCell 时遇到了类似的问题。问题是我将 FileOwner 设置为我的自定义类,然后连接了插座。

FileOwner 应该保持 NSObject。

于 2013-08-29T08:28:53.070 回答
7

我有这个并查看了所有内容并没有发现任何问题,但最终记得尝试清理并清除派生数据并解决了它!

于 2015-02-26T18:49:07.493 回答
2

我有一个类似的问题,但我initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil明确地使用类的名称作为传递的字符串(是的,格式不好!)。

我最终删除并使用稍微不同的名称重新创建了视图控制器,但忽略了更改方法中指定的字符串,因此我的旧版本仍在使用 - 即使它在垃圾箱中!

我可能会按照以下建议继续使用这种结构:是否将两个 nil 参数传递给 initWithNibName:bundle: 方法不好的做法(即不安全或更慢)?

- (id)init
{
    [super initWithNibName:@"MyNib" bundle:nil];
    ... typical initialization ...
    return self;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    return [self init];
}

希望这可以帮助某人!

于 2014-06-10T18:31:09.630 回答
2

这个错误是另外一回事!

这是我修复它的方法。我正在使用 xcode 版本 6.1.1 并使用 swift。每次我的应用程序尝试执行 segue 以跳转到下一个屏幕时,我都会收到此错误。这就是我所做的。

  1. 检查按钮是否连接到正确的操作。(这不是问题,但仍然可以检查)
  2. 检查按钮是否没有您可能错误创建的任何其他操作或插座。(这不是问题,但仍然可以检查)
  3. 检查日志并确保 NEXT SCREEN 中的所有按钮都具有正确的操作,如果有任何 segue,请确保它们具有唯一标识符。(这是问题)
    • 其中一个 segue 没有唯一标识符
    • 其中一个按钮有一个动作和两个我错误创建的插座。

删除任何额外的出口,并确保下一个屏幕的转义具有唯一标识符。

干杯,

于 2015-02-22T06:41:20.050 回答
1

因为是因为没有 2 功能

@implementation CellTableView

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    return [self init];
}
- (void)awakeFromNib {
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
}

@end
于 2015-02-03T16:02:10.923 回答
1

我遇到了这个问题,因为我没有使用 StoryBorad,并且在项目属性 -> 部署信息 -> 主界面上是 Main Xib 的名称。

我删除了主界面中的值并解决了问题。

于 2014-02-19T14:44:06.070 回答
1

这通常意味着有东西试图访问@property "givenName"

如果您对 做某事Interface Builder(IB),通常的原因是您:

  1. 从类中删除了该属性,但尚未删除 IB 中的连接
  2. 或者:您将 File's Owner 对象设置为错误的类(检查属性 - 根据您使用的 xcode 版本而有所不同
    • 找到其设置为的类名。您可能复制/粘贴了一个 NIB 文件,并且没有更改 NIB 中的此字段),并且您已经为该类连接了一个插座,但您的实际文件所有者是不同的
于 2014-08-25T13:43:57.017 回答
0

在我的情况下,我在 .h 中有IBOutlet UILabel *description,它是黄色的 /!\ - “不会合成”,我记得。不知道它是什么,为什么只有这个标签。

但是我遇到了像上面这样的崩溃和错误。删除 *description 并重新创建 *description2。结果没有崩溃。

于 2014-10-04T17:58:54.653 回答
0

如果您有不同的 storybord 文件,并且如果您有在头文件中没有创建插座的插座引用,那么您只需通过右键单击文件所有者来删除连接。

文件所有者->右键单击->删除那里不需要的连接。

仔细阅读这个以获得清晰的解释。 这是什么意思?“'NSUnknownKeyException',原因:......这个类不符合键 X 的键值编码”

于 2014-06-20T05:27:44.867 回答
0

对我来说,我将注册笔尖的集合视图标题切换为注册类。那解决了它。

于 2014-11-03T18:02:46.270 回答
0

我在所有地方的 PickerView 上得到了这个。错误消息在消息的第一条用“queuePicker”命名问题。这是由以前的引用插座引起的,在我添加一个组件并将原始 NSArray 重命名为 queuePicker 以外的其他内容后,该插座不再有效。CNTL+单击您的 StoryBoard 对象为您提供连接。我在引用插座中为 queuePicker 的 ViewController 旁边单击了“x”,建立了一个新连接,并且 viola,不再崩溃。

于 2013-07-16T23:13:57.543 回答
0

您可能正在为 alertView 中的键设置值,这是不允许的。关键是在这种情况下LoginScreen。我没有看到对 的任何调用setValue(),所以我认为它在代码中的其他地方。

于 2013-12-17T10:21:39.150 回答
0

我今天遇到了同样的问题。正如this answer中所建议的,问题是一个不干净的xib。在我的情况下,不干净的 xib 是更新由与其关联的视图控制器以外的东西加载的 xib 的结果。

Xcode 让我创建和填充一个新的插座并将它连接到文件的所有者,即使我明确地将它连接到正确视图控制器的源。下面是 Xcode 生成的代码:

    <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="LoginViewController"]]>
        <connections>
            <outlet property="hostLabel" destination="W4x-T2-Mcm" id="c3E-1U-sVf"/>
        </connections>
    </placeholder>

当我运行我的应用程序时,它因同样的not key value coding-compliant错误而崩溃。为了纠正这个问题,我从 Interface Builder 中的 File's Owner 中删除了插座,并将其显式连接到左侧轮廓上的视图控制器对象,而不是辅助编辑器中的代码。

于 2014-03-06T20:39:03.050 回答
0

我在创建自定义视图类时遇到了类似的错误,那是因为不知何故其中一个插座在 XIB 文件中连接了两次(我想我最初控制将控件直接拖到代码中,但后一个控件再次从文件的所有者)。我打开了 XIB 文件并删除了其中一个,之后一切正常。希望这会有所帮助。

于 2013-01-10T17:54:05.137 回答
0

这在以下情况下发生在我身上:

我在我的工作区中创建了第二个项目,为模板选择了“单一视图应用程序”。

然后我去了 Interface Builder(主 iPhone 故事板),将 a 添加到主视图,并通过 an和( )UISwitch将其连接到视图控制器。IBOutletIBAction-valueChanged:

启动时,应用程序崩溃,但问题中提到了异常。如果我从视图中删除开关,它就可以工作。

经过仔细检查,我意识到我将连接拖到了ViewController.h同一工作区中另一个项目的连接中。Interface Builder 的助手编辑器(又名Tuxedo 胸部图标)的“自动”集选择了错误的文件(具有正确的名称)作为“对应”文件。

希望这对某人有所帮助,特别是因为“单视图应用程序”和“SpriteKit 游戏”项目模板(在我的情况下)都创建了一个名为“ViewController”的默认视图控制器类。

于 2014-04-16T01:44:57.493 回答
-1

我不得不删除所有对象并重新添加它们。这似乎解决了这个问题。

于 2013-05-14T02:17:40.917 回答