2013-07-13 50 views
0

我是iOS開發的小菜鳥,所以我遵循HelloWorld教程here。我已經到了我在添加按鈕,文本字段和標籤後測試應用程序的階段。據我所知,我已經跟着教程去了信,我在運行應用時遇到了這個錯誤:Apple的HelloWorld教程中的NSUnknownKeyException

2013-07-13 15:26:39.629 HelloWorld [1304:11303] *終止應用程序由於 未捕獲的異常「NSUnknownKeyException」,原因: 「[< HelloWorldViewController 0x7566000>的setValue:forUndefinedKey:]: 這類不是密鑰值編碼兼容的鍵標籤」。 *第一擲調用堆棧:(0x1c90012 0x10cde7e 0x1d18fb1 0xb79e41 0xafb5f8 0xafb0e7 0xb25b58 0x22f019 0x10e1663 0x1c8b45a 0x22db1c 0xf27e7 0xf2dc8 0xf2ff8 0xf3232 0x423d5 0x4276f 0x42905 0x4b917 0xf96c 0x1094b 0x21cb5 0x22beb 0x14698 0x1bebdf9 0x1c13f3f 0x1c1396f 0x1c36734 0x1c35f44 0x1c35e1b 0x1017a 0x11ffc 0x1f9d 0x1ec5) 的libc + + abi.dylib:終止稱爲拋出異常

HelloWorldViewController.m生成的代碼是:

#import "HelloWorldViewController.h" 

@interface HelloWorldViewController() 
@property (weak, nonatomic) IBOutlet UILabel *label; 
@property (weak, nonatomic) IBOutlet UITextField *textField; 
- (IBAction)changeGreeting:(id)sender; 

@end 

@implementation HelloWorldViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)changeGreeting:(id)sender { 
} 
@end 

而在HelloWorldViewController.h

#import <UIKit/UIKit.h> 

@interface HelloWorldViewController : UIViewController 

@end 

我嘗試使用this的答案,但我看不到一個XIB文件(我想是因爲我使用的是故事板?),我不能看到任何VC差異明顯。

請幫忙。

+0

[此類不是密鑰的關鍵值編碼兼容](http://stackoverflow.com/questions/3088059/this-class-is-not-key-value-coding-compliant-for -key) – jtbandes

回答

0

故事板是一個封裝了XIB文件集合的單個文件。故事板中的每個「場景」代表本來是單個XIB文件的內容。

在故事板...

(1)中的相關場景選擇視圖控制器。 (2)打開Identity Inspector(右側「實用工具」窗格中的第三個選項卡)。檢查視圖控制器的類是否正確設置爲HelloWorldViewController。 (3)檢查視圖控制器的IBOutlets是否連接正確的視圖。 (按住Ctrl鍵點擊每個視圖並檢查它在HUD中的設置)。

'接線'需要將CTRL-從viewController拖動到故事板場景中的相關視圖。一個列表將出現適當的IBOutlet屬性來選擇。

這些屬性可以放在.h文件的接口聲明中,也可以放在.m文件的類擴展名中。

聲明爲@interface(在.h文件中)的接口是公共的;聲明爲@interface()(通常在.m文件中)的類擴展對類是私有的(儘管Obj-C中沒有任何內容是完全私有的)。類擴展對於聲明私有屬性或公開只讀和私有的readwrite屬性非常有用。請參閱apple docs。他們曾經很擅長聲明私有方法,但現在這是多餘的:方法只需要聲明,如果我們想讓它們公開。

一個很好的經驗法則是儘可能將您的聲明保存在類擴展名和.h文件中。現在這隻適用於屬性,因爲除非將它們公開,否則不需要方法聲明。

您提到您通過將您的屬性聲明從類擴展移動到公共接口來解決您的問題。這令人費解,因爲這兩個地點通常都可以接受。

+0

(2)沒問題。 (3)不太清楚我在這裏尋找什麼 - 它看起來不像任何東西的連接? –

+0

好吧,我想我已經修復了它,但我並不真正瞭解如何。在'.h'和'.m'文件中有一個@界面。我將'@ property'屬性移動到頭部,現在我沒有看到錯誤?爲什麼有兩種語法不同的界面?我也是Objective-C的新手,所以我可能因此而感到困惑! –

+0

@EdKing,查看我的更新說明... – foundry

0

我刪除了所有參考插口和動作,您可以在連接指示器中看到,同時在故事板工作區中逐個選擇對象,並刪除由xcode自動添加的一些代碼。

然後我再次通過以下教程製作它們。最後它運行良好。