参考 iOS编程:Big Nerd Ranch指南的第一个测试项目Quiz,但是现在它使用NIB文件而不是Storyboard。所以我尝试自己做。
按照本书的代码,然后将其运行到模拟器中,屏幕将不显示任何内容。
// ViewController.m
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic) int currentQuestionIndex;
@property (nonatomic, copy) NSArray *questions;
@property (nonatomic, copy) NSArray *answers;
@property (nonatomic, weak) IBOutlet UILabel *questionLabel;
@property (nonatomic, weak) IBOutlet UILabel *answerLabel;
@end
@implementation ViewController
- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
// Call the init method implemented by the superclass
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// create two arrays filled with questions and answers
// and make the pointers point to them
self.questions = @[@"From what is cognac made?",
@"What is 7+7?",
@"What is the capital of Vermont?"];
self.answers = @[@"Grapes",
@"14",
@"Montpelier"];
}
// Return the address of the new object
return self;
}
- (IBAction)showQuestion:(id)sender
{
// Step to the next question
self.currentQuestionIndex++;
// Am I past the last question?
if (self.currentQuestionIndex == [self.questions count]) {
// Go back to the first question
self.currentQuestionIndex = 0;
}
// Get the string at that index in the questions array
NSString *question = self.questions[self.currentQuestionIndex];
// Display the string in the question label
self.questionLabel.text = question;
// Reset the answer label
self.answerLabel.text = @"???";
}
- (IBAction)showAnswer:(id)sender
{
// What is the answer to the current question?
NSString *answer = self.answers[self.currentQuestionIndex];
// Display it in the answer label
self.answerLabel.text = answer;
}
@end
// AppDelegate.m
#import "AppDelegate.h"
#import "ViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch
ViewController *quizVC = [[ViewController alloc] init];
self.window.rootViewController = quizVC;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
@end
我认为情节提要与NIB文件有所不同,因此,如果要实现情节提要的版本,应如何编写此代码。
我已经成功完成了该项目的所有其他工作。
此测验项目的其他信息。
答案 0 :(得分:0)
在AppDelegate
类中,用initWithNibName
加载ViewController,
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch
ViewController *quizVC = [[ViewController alloc] initWithNibName:@"YourNIBFileName" bundle:nil];
self.window.rootViewController = quizVC;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}