2014-02-06 3 views
0

Я работаю вместе с книгой приложений 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 
+1

Скорее всего, проблема заключается в том, что метод 'initWithNibName: bundle:' никогда не вызывается, поэтому 'вопросы' никогда не инициализируются. Возможно, вы должны использовать 'initWithCoder:'. – rmaddy

+0

Я предполагаю, что «вопросы» - это нуль, потому что он никогда не был инициализирован. –

ответ

0

Я удалил initWithNibName: метод расслоения и поместить этот код в viewDidLoad

- (void)viewDidLoad 
{ 
    if (self) 
    { 
     // Create two arrays and make the pointers point to them 
     questions = [[NSMutableArray alloc] init]; 
     answers = [[NSMutableArray alloc] init]; 

     // Add questions and answers to the array 
     [questions addObject:@"What is 7 + 7?"]; 
     [answers addObject:@"14"]; 

     [questions addObject:@"What is the capital of Vermont?"]; 
     [answers addObject:@"Montpelier"]; 

     [questions addObject:@"What is cognac made from?"]; 
     [answers addObject:@"Grapes"]; 
    } 

} 
+1

Не забудьте поставить [super viewDidLoad] в верхней части метода. – daveMac

+0

И есть необходимость проверить 'self'. – rmaddy

Смежные вопросы