2012-02-05 59 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暗示)或簡單的舊錯字(缺少尾部:)。