使用 Xcode 5.0,我正在尝试遵循Big Nerd Ranch 书第 2 版,这似乎有点过时了。
有一个带有 2 个标签和 2 个按钮的示例测验项目。
我已经从书中复制了源代码,尤其是。AppDelegate.h
:_
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
int currentQuestionIndex;
NSMutableArray *questions;
NSMutableArray *answers;
IBOutlet UILabel *questionField;
IBOutlet UILabel *answerField;
}
@property (strong, nonatomic) UIWindow *window;
- (IBAction)showQuestion:(id)sender;
- (IBAction)showAnswer:(id)sender;
@end
书中没有MainWindow.xib
提到,但我确实有一个Main.storyboard
,我在其中放置了标签和按钮:
我可以在源代码编辑器左侧(在上面的屏幕截图中间)和“连接检查器”(例如“Touch Up Inside”)中看到 4 个空心小圆圈,但我就是看不到它们连接的。我尝试从小圆圈拖动和 ctrl-拖动到按钮/标签,有一条蓝线,但它没有连接。
当我右键单击按钮/标签时,会出现一个关于“Outlets”的灰色菜单,但那里没有列出我的 IBOutlets/IBActions。
请问如何将连接添加到标签和按钮?
更新:
根据 Rob 的建议(谢谢 +1),我已将属性和方法移至ViewController.*
并能够连接标签和按钮。当我单击按钮时,我看到了正在调用的方法。
但是现在我遇到的问题是类的init
方法ViewController
没有运行,因此两个数组都是零。
请问还有什么提示吗?而且我不确定为什么将我的问题关闭的建议“过于宽泛” - 我附上了(短)代码和屏幕截图,我的 2 个问题非常具体(可能是基本的)。
视图控制器.h:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
int currentQuestionIndex;
NSMutableArray *questions;
NSMutableArray *answers;
IBOutlet UILabel *questionField;
IBOutlet UILabel *answerField;
}
- (IBAction)showQuestion:(id)sender;
- (IBAction)showAnswer:(id)sender;
@end
视图控制器.m:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (id)init { // XXX is never called??
self = [super init];
if(self) {
questions = [[NSMutableArray alloc] init];
answers = [[NSMutableArray alloc] init];
[questions addObject:@"What is 7 + 7?"];
[answers addObject:@"14"];
[questions addObject:@"What is the capital of Vermont?"];
[answers addObject:@"Montpelier"];
[questions addObject:@"From what is cognac made?"];
[answers addObject:@"Grapes"];
}
return self;
}
- (IBAction)showQuestion:(id)sender // XXX runs ok when clicked
{
currentQuestionIndex++;
if (currentQuestionIndex == [questions count]) {
currentQuestionIndex = 0;
}
NSString *question = [questions objectAtIndex:currentQuestionIndex];
NSLog(@"displaying question: %@", question);
[questionField setText:question];
[answerField setText:@"???"];
}
- (IBAction)showAnswer:(id)sender // XXX runs ok when clicked
{
NSString *answer = [answers objectAtIndex:currentQuestionIndex];
[answerField setText:answer];
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end