setValue:forUndefinedKey:这个类不是密钥编码兼容的密钥
我正在创build一个login查看支持票。 第一个视图是票据视图,如果您未login,则将您推入login屏幕。 但是我收到这个:
支持[3209:18e03] *由于未捕获的exception“NSUnknownKeyException”,原因:'[setValue:forUndefinedKey:]:该类不是关键的LoginScreen编码兼容值。 *
第一掷调用堆栈:(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:终止调用抛出exception
这是我的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>
这种莫名其妙的exception往往是不洁的xib
文件的结果。 在xcode中打开xib
,selectFile's Owner并点击“Connection Inspector”(右上angular的箭头),一次查看所有网点。 寻找!
这表明缺less出路。
在Interface Builder中检查你的连接。 您可能指的是不存在的IBOutlet
或IBAction
。
多谢你们。 我通过你的帮助解决了这个问题。 所以,我希望这个截图有助于有同样问题的人。
我有与创build自定义TableCell类似的问题。 问题是我把FileOwner设置为我的自定义类,然后连接sockets。
FileOwner应该保持NSObject。
转到Xcode的断点标签。 使用底部的button添加一个exception断点。 现在,您将看到哪些代码正在调用setValue:forKey:和关联的堆栈。 如果运气好的话就会直接指出问题的根源。
奇怪你的class级是login屏幕,但错误是说有人正在使用“login屏幕”作为一个关键。 检查LoginScreen.m是你的目标的一部分。
脚注:使用Swift时,如果您更改类的名称 (所以,您在代码中的任何地方都将其重命名),则会出现常见问题。 故事板就是这样做的,你通常需要重新拖拽任何涉及这个类的连接。 特别是, 重新input右侧IdentityInspector选项卡中任何地方使用的类的名称 。 (在这个例子中,我故意拼错了类的名字,但是同样的事情经常发生在你重命名一个类时, 即使它在IdentityInspector中看起来是正确的 ,你仍然需要重新input这个名字;它会正确地自动完成,走。)
我有这个,看了一切,没有看到任何问题,但最终还是记得尝试清理和清除派生数据,并解决了它!
我有一个类似的问题,但我使用initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
显式使用类的名称作为string传递(是坏forms!)。
我最终删除并重新创build视图控制器使用一个稍微不同的名称,但忽略更改方法中指定的string,因此我的旧版本仍然使用 – 即使它在垃圾桶!
我可能会按照下面的build议使用这个结构: 传递两个nil参数到initWithNibName:bundle:方法不好的做法(即不安全或者更慢)?
- (id)init { [super initWithNibName:@"MyNib" bundle:nil]; ... typical initialization ... return self; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { return [self init]; }
希望这可以帮助别人!
这个错误是别的!
这是我如何解决它。 我正在使用xcode版本6.1.1并使用swift。 每当我的应用程序试图执行一个跳转到下一个屏幕,我得到这个错误。 在这里,我做了什么。
- 检查button是否连接到正确的操作(这不是问题,但仍然很好检查)
- 检查该button没有任何您可能错误地创build的附加动作或sockets。 (这不是问题,但仍然很好检查)
- 检查日志并确保下一个屏幕中的所有button都具有正确的操作,并且如果有任何segse,请确保它们具有唯一的标识符。 (这是问题)
- 其中一个赛段没有一个唯一的标识符
- 其中一个button有一个动作,我错误地创build了两个插口。
删除任何额外的sockets,并确保你到下一个屏幕的赛段有唯一的标识符。
干杯,
我有这个问题,因为我没有使用StoryBorad,并在项目属性 – >部署信息 – >主界面是主Xib的名称。
我删除了值主界面,并解决了问题。
我创build一个自定义视图类时遇到了一个类似的错误,这是因为不知何故一个sockets被连接两次在XIB文件(我想我最初控制拖动控件直接代码,但后者的控制再次从拖动文件的所有者)。 我打开XIB文件并删除其中的一个,之后,一切正常。 希望这有助于。
我在所有地方的PickerView上得到了这个。 错误消息是在消息的第一个消息中用“queuePicker”命名问题。 这是由一个以前的引用出口引起的,在我添加了一个组件之后,这个引用出口没有多长时间,并且把原始的NSArray重命名为queuePicker以外的东西。 CNTL +点击你的StoryBoard对象给你的连接。 我点击了引用Outlets中的queuePicker的ViewController旁边的“x”,build立了一个新的连接,并且中提琴没有更多的崩溃。
您可能为alertView中的某个键设置了值,这是不允许的。 在这种情况下,关键是LoginScreen
。 我没有看到setValue()
任何调用,所以我认为它是在代码中的其他地方。
我今天遇到了同样的问题。 正如在这个答案中所build议的,问题是一个不洁的xib。 在我的情况下,不洁的xib是更新一个xib的结果,这个xib是由与它关联的视图控制器以外的东西加载的。
Xcode让我创build并填充一个新的出口,并将其连接到文件的所有者,即使我明确地将其连接到正确的视图控制器的来源。 以下是由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中的文件所有者中删除了sockets,并将其明确地连接到左侧轮廓上的视图控制器对象,而不是连接到编辑器中的代码。
这发生在以下情况下:
我在我的工作区创build了第二个项目,为模板select了“单一视图应用程序”。
然后我去了界面生成器(主iPhone故事板),添加一个UISwitch
到主视图,并通过一个IBOutlet
和一个IBAction
( -valueChanged:
连接到视图控制器。
在启动时,应用程序崩溃,问题中提到的例外。 如果我从视图中删除开关,它的工作。
经过仔细检查,我意识到我控制 – 拖动连接到同一工作区中的另一个项目的ViewController.h
。 “自动”界面生成器的辅助编辑器(也称为Tuxedo胸部图标 )组select了“对应”错误的文件(使用正确的名称)。
希望这可以帮助别人,特别是因为“单一视图应用程序”和“SpriteKit游戏”项目模板(在我的情况下)创build一个名为“视图控制器”的默认视图控制器类。
如果你有不同的storybord文件,并且如果你的头文件中有outsockets的创build,那么你只需通过右键单击文件所有者来删除连接。
文件所有者 – >右键单击 – >在那里删除不需要的连接。
通过这个清楚的解释。 这是什么意思? “'NSUnknownKeyException',原因:…这个类不是密钥X的编码兼容密钥值”
这通常意味着某事正试图访问@property“givenName” 。
如果你正在使用Interface Builder(IB)
做一些事情,通常的原因是你:
- 删除了该类的属性,但还没有删除IB中的连接
- 或者:你有一个文件的所有者对象设置为错误的类(检查属性 – 不同取决于你正在使用的xcode的版本
- find其设置为的类名称。 你可能复制/粘贴了一个NIB文件,并没有改变NIB中的这个字段),并且你已经为这个类连接了一个sockets,但是你的实际文件的所有者是不同的
在我的情况下,我有IBOutlet UILabel *描述在.h,这是与黄/! “ – 将不会合成” ,我记得。 不知道是什么,为什么只有这个标签。
但是,我得到了这个崩溃和像上面的错误。 删除*描述并重新创build* description2。 结果没有崩溃。
对我来说,我切换了我的collections视图标题的电话,我正在注册笔尖注册类。 这固定它。
因为是没有2function的
@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
我不得不删除所有对象,并重新添加它们。 这似乎解决了这个问题。