2012-02-05 60 views
1

即时获取SIGABRT错误,每次我建立。林看到下面的原因:SIGABRT错误 - NSUnknownKeyExeption(SetValue:forUndefinedKey;)

终止应用程序由于未捕获的异常“NSUnknownKeyException”,原因:“[setValue方法:forUndefinedKey:]:此类不是密钥值编码兼容的关键numberEntered”

-(IBAction)numberEntered:(id)sender 
{ 
    NSNumber *day=[NSString stringWithFormat:@"@%", dayEntry]; 

    NSLog(@"%@", day); 
} 

我认为它的东西与我试图传递错误的价值*天,但我看不到有什么问题是(在Xcode没有错误)。

基本上我想要做的就是从文本字段中检索数值并将其设置为变量(日),以便我可以在计算中使用它。我已经添加了NSLog,以确保从我的文本字段获取正确的数据。

在此先感谢!

+0

这听起来像是你的InterfaceBuilder安装中的一个问题。您将为其不属于的类型指定一个UI元素(已经)。 – Till 2012-02-05 15:19:21

+0

在搜索Stackoverflow后,我读到它可能是IB中的一个问题。我到处搜查,至今无法找到问题。我应该在一个特定的地方看? – Jonnybellman 2012-02-05 15:21:36

+0

检查已实施'numberEntered:'的对象的“Custom Class”属性“Class” - 是否显示您正在使用的Class-Name? – Till 2012-02-05 15:24:13

回答

0

确保您的自定义类实现实现numberEntered:实际上是在InterfaceBuilder中内下定制类类选择(UIView/UIViewController/UITextFIeld或诸如此类的东西子类)。

为了这个例子,我假设它是一个基于UIViewController的类,你可以称它为MyViewController。从这个意义上说,当观察“文件所有者”时,您需要在提到的IB下输入该名称。

为了验证这是否是您的问题,您可以在您的viewDidLoad方法中添加一些东西,将某些东西打印到控制台中。在能够这样做之前,您必须从事件中移除该自定义方法(因为该婴儿会引发异常)。如果在显示该viewController的视图时没有出现这种情况,那么您就知道自己遇到了上述问题。

看到这个:

enter image description here

+0

如果我正确地关注你,我已经将xcode特定标签更改为“dayEntry”(或本例的MyTextField)这就是你的意思 – Jonnybellman 2012-02-05 15:50:40

+0

对不起,我似乎已经把你弄糊涂了,我的不好,看到更新后的答案 – Till 2012-02-05 16:49:49

+0

我觉得我做得很对,查看这里的图像:db.tt/k9vv1dtP)。我实际上没有4.2中可用的占位符。版本的xCode(至少我不能看到它) – Jonnybellman 2012-02-05 18:32:11

0

尝试了这一点:

NSNumber *day = [NSNumber numberWithInt:[dayEntry intValue]]; 
+0

我刚刚使用该行,并即时得到_Reciever类型UITextfield例如消息没有声明一个方法与选择器'intValue'_ – Jonnybellman 2012-02-05 15:12:58

+0

我添加了.text后dayEntry减轻了致命错误。但是,代码仍然不运行没有SIGABRT故障 – Jonnybellman 2012-02-05 15:17:16

+0

更改为'NSNumber *日= [NSNumber numberWithInt:[dayEntry.text intValue]];然后。你的dayEntry实例显然是一个UITextField,它没有实现方法intValue。但它实现了属性文本(它返回一个NSString,它可以通过使用intvalue转换为一个整数。) – Till 2012-02-05 15:17:47

1

另一个问题是你的格式字符串和你是一个NSNumber分配一个NSString的事实。

NSNumber *day=[NSString stringWithFormat:@"@%", dayEntry]; 

尝试将其更改为:

NSString *day=[NSString stringWithFormat:@"%@", dayEntry]; 

细微的差别,看你是否能发现它。

+0

是的,我认为我有所不同;)它仍然抛出了SIGABRT问题。什么时候应该使用NSNumber,什么时候应该使用NSString?我有我的UITextfield使用数字键盘,所以它将始终是一个数字。我会拿3个数字)3个单独的文本框)来创建一个日期。然后最终比较两个日期以获得差异 – Jonnybellman 2012-02-05 16:02:26

0

请确保您确实已使用IB注册了名为numberEntered:(注意尾部冒号)的方法。这是一种不同于numberEntered(不带尾部冒号)的方法。该错误可能是由于

  • 视图调用numberEntered(而不是numberEntered:
  • 运行时试图解决通过KVC查找的(未定义的方法)引起的。

这可能是由缺少(或错误)的文件所有者和响应引起的。在您的控件的.xib文件中定义的自定义类(由Till暗示)或简单的旧错字(缺少尾部:)。