我遇到了一个疯狂的错误,我无法理解为什么会这样。 我做了一个简单的应用程序,使用TabBar来导航3个视图。我创建了所有内容,并为TabBar管理的3个ViewController中的每一个添加了一个UIImageView。一切正常。在应用程序中,您可以浏览3个视图并查看3个图像。
现在我将一个UIButton(或任何其他组件)添加到第一个ViewController。我将它添加到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:]:这个类 不符合关键值编码 关键btn。'
我尝试重新启动SDK,我的计算机,构建2.2.1,3.0,模拟器,设备,清理所有目标等,但问题仍然存在。我确信它与UITabBarController有关。我只是看不出来。
答案 0 :(得分: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。您需要将其类更改为子类视图控制器,以便它们正确加载并连接到您的插座:
**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方法的原因
答案 1 :(得分:2)
将控件连接到不存在的插座时,会出现该错误。
错误消息中最重要的部分被遗漏了(因为它包含在尖括号中):
reason: [<classname> setValue:forUndefinedKey:
classname 是您可能无意中将该按钮连接到Interface Builder中的类。它没有btn
插座。
答案 2 :(得分:1)
问题似乎是由我的MainWindow NIB中的UITabBarController引起的。我无法修复它所以我从NIB中删除了UITabBarController,并在AppDelegate类的代码中创建了它。然后我将所有其他类设置为“initWithNib”,现在我可以在其中设置IBOutlets就好了。
答案 3 :(得分: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
我希望你把所有的东西放在正确的位置,但就像我说的那样值得仔细检查!
答案 4 :(得分:0)
我最近遇到了这个确切的错误,发现只是做一个Clean All目标修复了这个问题。可能就这么简单。
答案 5 :(得分:0)
我今天遇到了这个问题。原因: 我在我的委托中定义了IBOutlet,并将其连接起来。后来我从代码文件中删除了它。但是,该引用仍在XIB文件中处于活动状态。它变灰了。删除XIB中的引用有助于。
我正在做其他事情所以我认为问题出在我添加的新组件中,没有意识到它是由此引起的。