0

我是 iOS 开发的菜鸟,所以我在这里学习 HelloWorld 教程。添加按钮、文本字段和标签后,我已经到了测试应用程序的阶段。据我所知,我已按照教程进行操作,并且在运行应用程序时出现此错误:

2013-07-13 15:26:39.629 HelloWorld[1304:11303] * 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[<HelloWorldViewController 0x7566000> setValue:forUndefinedKey:]:此类不符合键值编码为关键标签。* 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

我删除了在故事板工作区中一一选择对象时可以在连接指示器中看到的所有引用插座和操作,并删除了一些由 xcode 自动添加的代码。

然后我再次按照教程制作了它们。最后它工作正常。

于 2013-09-21T09:34:51.937 回答
0

故事板是封装 XIB 文件集合的单个文件。故事板中的每个“场景”都代表一个单独的 XIB 文件。

在故事板...

(1)在相关场景中选择View Controller。
(2) 打开 Identity Inspector(右侧实用程序窗格中的第三个选项卡)。检查视图控制器的类是否正确设置为HelloWorldViewController.
(3) 检查视图控制器的 IBOutlets 是否正确连接到正确的视图。(按住 Ctrl 键单击每个视图并检查其在 HUD 中的设置)。

“连线”需要按住 CTRL 键从 viewController 拖动到情节提要场景中的相关视图。将出现一个列表,其中包含可供选择的适当 IBOutlet 属性。

这些属性可以放在 .h 文件的接口声明中,也可以放在 .m 文件的类扩展中。

声明为@interface(在 .h 文件中)的接口是公共的;声明为@interface()(通常在 .m 文件中)的类扩展是类私有的(尽管在 Obj-C 中没有什么是完全私有的)。类扩展对于声明私有属性或公共只读和私有读写的属性很有用。请参阅苹果文档。过去它们很适合声明私有方法,但现在这是多余的:方法只需要在我们想让它们公开时声明。

一个好的经验法则是尽可能将您的声明保留在类扩展名中和 .h 文件之外。如今,这应该只适用于属性,因为不需要方法声明,除非将它们公开。

您提到您通过将属性声明从类扩展移动到公共接口来解决您的问题。这是令人费解的,因为这两个位置通常都可以用于此用途。

于 2013-07-13T15:56:44.303 回答