0

私は iOS 開発の初心者なので、HelloWorld チュートリアルhereに従っています。ボタン、テキスト フィールド、ラベルを追加した後、アプリをテストする段階になりました。私が知っている限り、チュートリアルに従って手紙を書きましたが、アプリを実行すると次のエラーが発生します。

2013-07-13 15:26:39.629 HelloWorld[1304:11303] * キャッチされない例外 'NSUnknownKeyException' が原因でアプリを終了しています。キーラベル用。* First throw call stack: (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: terminate例外のスローと呼ばれる

で生成されるコードは次の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

この回答を使用してみましたが、XIB ファイルが表示されず (ストーリーボードを使用しているためだと思いますか?)、VC に明らかな矛盾は見られません。

助けてください。

4

2 に答える 2

0

ストーリーボードは、XIB ファイルのコレクションをカプセル化した単一のファイルです。ストーリーボードの各「シーン」は、そうでなければ単一の XIB ファイルになるものを表します。

ストーリーボードで...

(1) 該当するシーンで View Controller を選択します。
(2) Identity Inspector を開きます (右側の [ユーティリティ] ペインの 3 番目のタブ)。ビュー コントローラのクラスが正しく設定されていることを確認しHelloWorldViewControllerます。
(3) ビュー コントローラーの IBOutlets が正しいビューに正しく配線されていることを確認します。(各ビューを Ctrl キーを押しながらクリックし、HUD で設定を確認します)。

「配線」には、viewController からストーリーボード シーンの関連するビューへの CTRL キーを押しながらドラッグする必要があります。選択する適切な IBOutlet プロパティのリストが表示されます。

これらのプロパティは、.h ファイルのインターフェイス宣言または .m ファイルのクラス拡張に配置できます。

@interface(.h ファイルで)として宣言されたインターフェイスは public です。(通常は .m ファイルで)として宣言されたクラス拡張は、@interface()そのクラスに対してプライベートです (ただし、Obj-C では完全にプライベートなものはありません)。クラス拡張は、プライベート プロパティ、またはパブリックに読み取り専用でプライベートに読み書きできるプロパティを宣言するのに役立ちます。アップルのドキュメントを参照してください。以前はプライベート メソッドを宣言するのに適していましたが、現在は冗長です。メソッドをパブリックにしたい場合にのみ宣言する必要があります。

経験則としては、可能な限り宣言をクラス拡張子内に保持し、.h ファイルの外に置くことをお勧めします。最近では、公開しない限りメソッド宣言は必要ないため、これはプロパティにのみ適用されます。

プロパティ宣言をクラス拡張からパブリック インターフェイスに移動することで問題を解決したとのことでした。通常、どちらの場所もこの用途に使用できるため、これは不可解です。

于 2013-07-13T15:56:44.303 に答える