2012-04-10 6 views
1

Im использует приложение с вкладками в xcode 4.3.Не вводит мой конструктор

Я просто пытаюсь инициализировать некоторые переменные, которые я объявил в моем .h файле моего FirstViewController. Я пытаюсь это сделать, создав конструктор в моем .m-файле, например.

.h файл:

#import <UIKit/UIKit.h> 

@interface FirstViewController : UIViewController { 

    IBOutlet UITextField *currentGuess; 
    IBOutlet UILabel *attemptsMade; 
    IBOutlet UILabel *attemptsLeft; 
    IBOutlet UITextView *hints; 
    int numberToGuess; 
    int numberOfGuessesMade; 
    int maxGuesses; 
    int maxGenNumber; 

    NSMutableArray *allGuesses; 


} 

- (id) init; 

@end 

.m файл

#import "FirstViewController.h" 

@interface FirstViewController() 

@end 

@implementation FirstViewController 

    - (id) init { 
     NSLog(@"entered constructor!"); 

     if(self = [super init]) 
     { 
      numberToGuess = 0; 
      numberOfGuessesMade = 0; 
      maxGuesses = 3; 
      maxGenNumber = 10; 
     } 

     return self; 
    } 
+0

Пробовал ответы ниже, в итоге вместо этого использовал viewDidLoad. –

ответ

3

UIViewController не имеет смысла инициализировать методом init. Normaly вам нужно - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

Если Вы строите из файла XIB, чем это сделать, как этот

Вам необходимо разместить код инициализации в - (void)awakeFromNib или -(void)viewDidLoad.

Что-то вроде этого для вашего случая

@implementation FirstViewController

- (id) awakeFromNib { 
    NSLog(@"entered XIB constructor!"); 

    numberToGuess = 0; 
    numberOfGuessesMade = 0; 
    maxGuesses = 3; 
    maxGenNumber = 10; 

} 

если не XIb то:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { 
    NSLog(@"entered constructor!"); 

    if(self = [super initWithNibName:nibName bundle:nibBundle]) 
    { 
     numberToGuess = 0; 
     numberOfGuessesMade = 0; 
     maxGuesses = 3; 
     maxGenNumber = 10; 
    } 

    return self; 
} 

И помните. init не является «реальным» конструктором, так как вы учитесь в классе OO.

0

Если вы используете перо. awakeFromNib будет вызываться метод. Также проверьте, используются ли варианты использования метода init, initWithNibName, initWithframe и т. Д.

0

Можете ли вы разместить код, где вы создаете VC? Если вы делаете это из XIB инициализации не будет называться, вместо того, что вы должны переписать:

initWithNibName 
1

Как отмечалось в UIViewController documentation, назначенный инициализатор UIViewController является initWithNibName:bundle:. Но в зависимости от того, как создается ваш контроллер просмотра (например, в коде или как часть раскадровки), это может даже не вызываться, и вместо этого может быть initWithCoder:.

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