1

クレイジーなエラーが発生し、その理由がわかりません。TabBar を使用して 3 つのビューをナビゲートする簡単なアプリを作成しました。すべてを作成し、TabBar が管理する 3 つの ViewController のそれぞれに 1 つの UIImageView を追加しました。すべて正常に動作します。アプリでは、3 つのビューをナビゲートして 3 つの画像を見ることができます。

ここで、最初の ViewController に 1 つの UIButton (またはその他のコンポーネント) を追加します。私はそれをNIBに追加し、私のコードではいつものようにします:

IBOutlet UIButton *btn;
@property (nonatomic, retain) IBOutlet UIButton *btn;

@synthesize btn;
[btn release];

私のNIBのUIButtonを「btn」に接続します。TabBar がこのビューを表示しようとするとすぐにアプリがクラッシュします (起動直後)。

2009-08-24 16:52:25.164 AppName[2249:207] *** キャッチされない例外 'NSUnknownKeyException' が原因でアプリを終了しています。理由: '[ setValue:forUndefinedKey:]: このクラスは、キーボタン。

SDK、コンピューター、2.2.1、3.0、シミュレーター、デバイスのビルド、すべてのターゲットのクリーニングなどを再起動しようとしましたが、問題は残ります。UITabBarController と関係があると確信しています。私はちょうど何を見ることができません。

4

6 に答える 6

3

同様の問題がありました。タブの UIViewController が、作成した UIViewController の特定のサブクラスに設定されていなかったためです。

IB の .xib を見ると、次のように表示されます。

  **Name**                **Type**
  File's Owner        UIApplication
  First Responder     UIResponder
  Tab Bar Controller  UITabBarController
     Tab Bar          UITabBar
     View Controller  UIViewController
     View Controller  UIViewController
     View Controller  UIViewController

タブ バー コントローラーの下のビュー コントローラーは、デフォルトで基本的な UIViewController になります。それらをロードしてアウトレットに正しく接続するには、クラスをサブクラス化されたView Controllerに変更する必要があります。

  **Name**                **Type**
  File's Owner        UIApplication
  First Responder     UIResponder
  Tab Bar Controller  UITabBarController
     Tab Bar          UITabBar
     FirstTab View Controller  MyFirstTabController
     SecondTab View Controller MySecondTabController
     ThirdTab View Controller  MyThirdTabController

次に、タブがタブのコントローラーを作成すると、正しいクラスが作成されます。これがおそらく viewDidLoad メソッドが呼び出されない理由であることに注意してください

于 2009-10-30T04:55:21.313 に答える
2

存在しないコンセントにコントロールを接続すると、このエラーが発生します。

エラー メッセージの最も重要な部分が省略されています (山かっこで囲まれているため)。

reason: [<classname> setValue:forUndefinedKey:

classnameは、Interface Builder でおそらく不注意にボタンを接続したクラスです。btnコンセントがありません。

于 2009-08-24T19:19:50.657 に答える
1

この問題は、私の MainWindow NIB の UITabBarController によって引き起こされたようです。修正できなかったので、NIB から UITabBarController を削除し、AppDelegate クラスのコードで作成しました。次に、他のすべてのクラスを「initWithNib」に設定し、IBOutlets を問題なく設定できるようになりました。

于 2009-08-25T11:05:44.443 に答える
0

私は今日この問題を抱えていました。原因:デリゲートでIBOutletを定義し、接続しました。後でそれをコードファイルから削除しました。ただし、参照はXIBファイルでまだアクティブでした。グレー表示されていました。XIBで参照を削除すると役に立ちました。

私は何か他のことをしていたので、問題は私が追加した新しいコンポーネントにあると思いましたが、これが原因であることに気づいていませんでした。

于 2009-12-08T14:32:54.813 に答える
0

あなたの 4 行のコードはすべて適切な場所にあると思いますか? コンパイラは、あなたが btn に対して別のことを意図していると考えているように見えるので、再確認する価値があります。

したがって、4行が次のように表示されることを再確認する価値があります。

// in your myController.h file

@interface myController:UIViewController {    
IBOutlet UIButton *btn;
}

@property (nonatomic, retain) IBOutlet UIButton *btn;
@end

// in your myController.m file

@implementation myController    
@synthesize btn;

- (void)dealloc {
   [btn release];
   [super dealloc];
}

@end

すべてのビットが正しい場所に配置されていると思いますが、前述のとおり、再確認する価値があります。

于 2009-08-24T16:25:09.763 に答える
0

私は最近、この正確なエラーに遭遇し、Clean All ターゲットを実行するだけで問題が解決したことがわかりました。それと同じくらい簡単かもしれません。

于 2009-09-12T14:47:03.107 に答える