Я работаю вместе с книгой приложений BigNerdRanch ios. В первой главе он делает небольшое приложение для викторины с вопросами, жестко закодированными в файл кода. Если приложение запускается успешно, он должен сказать displaying question: "What is blah blah?"
в консоли, но при запуске приложения он говоритЭлементы массива:
displaying question: (null)
Другими словами, (NULL) появляется вместо вопроса из массива.
При компиляции ошибок не возникает. Интересно, связано ли это с тем, что мой XCode использует файл Main.storyboard
, а не файлы xib и nib, в сочетании с тем, что контроллер вида использует метод, который, как представляется, ожидает файл nib, а именно
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:
Любая помощь будет оценена по достоинству. Это все код.
iosQuizViewController.h
#import <UIKit/UIKit.h>
@interface iosQuizViewController : UIViewController
iosQuizViewController.h
{
int currentQuestionIndex;
NSMutableArray *questions;
NSMutableArray *answers;
IBOutlet UILabel *questionField;
IBOutlet UILabel *answerField;
}
- (IBAction)showAnswer:(id)sender;
- (IBAction)showQuestion:(id)sender;
@end
iosQuizViewController.m
#import "iosQuizViewController.h"
@interface iosQuizViewController()
@end
@implementation iosQuizViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
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
{
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
{
NSString *answer = [ answers objectAtIndex:currentQuestionIndex];
[answerField setText:answer];
}
@end
Скорее всего, проблема заключается в том, что метод 'initWithNibName: bundle:' никогда не вызывается, поэтому 'вопросы' никогда не инициализируются. Возможно, вы должны использовать 'initWithCoder:'. – rmaddy
Я предполагаю, что «вопросы» - это нуль, потому что он никогда не был инициализирован. –