Застрял с файлом IBOutlet - PullRequest
       4

Застрял с файлом IBOutlet

3 голосов
/ 10 января 2011

Итак, я следую этой учебной книге по Xcode: Iphone и Ipad Game Development for Dummies. Это хорошая книга, но есть кое-какие недостатки. Большую часть времени я могу обойти эти недостатки, но теперь я наткнулся на то, что не могу исправить. Даже их сайт или контакты не знают ответа.

Я пытаюсь сделать игру с машинами и прочим. Но проблема заключается в главном меню. Я уже сделал кнопки с режимом пользовательских кнопок. И использовал IbActions, чтобы заставить их работать (фактически, «Новая игра» - единственная кнопка, которая работает сейчас, потому что у нее уже есть сценарий). Но теперь я должен сделать IBOutlets, чтобы дать им анимацию. Книга сказала мне, чтобы использовать QuartzCore.framework. Теперь проблема в том, что когда я пытаюсь его построить, я получаю эту ошибку: в интерфейсе не найдено объявление свойства 'newGameButton'.

Это мой сценарий.

Заголовочный файл:

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>

@interface MainMenuViewController : UIViewController {

//This has changed         
@property(nonatomic,retain) IBOutlet UIButton* newGameButton;                             
@property(nonatomic,retain) IBOutlet UIButton* statsButton;
@property(nonatomic,retain) IBOutlet UIButton* settingsButton;


        CAKeyframeAnimation* popAnimation;

}
-(IBAction) newGame:(id)sender;
-(IBAction) showStats:(id)sender;
-(IBAction) showSettings:(id)sender;
@end

И файл .m (это называется имплантацией?):

#import "MainMenuViewController.h"
#import "TrafficAppDelegate.h"
#import "TrafficViewController.h"

@implementation MainMenuViewController


-(IBAction) newGame:(id)sender{
        TrafficViewController* traffic = [[TrafficViewController alloc] initWithNibName:@"TrafficViewController" bundle:nil];
        [self.navigationController pushViewController:traffic animated:NO];
}

-(IBAction) showStats:(id)sender{
}
-(IBAction) showSettings:(id)sender{
}

@synthesize newGameButton, statsButton, settingsButton;

-(void)viewDidLoad{

        [super viewDidLoad];

        popAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];

        popAnimation.keyTimes = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.7], [NSNumber numberWithFloat:1.0], nil];
        popAnimation.values = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.01], [NSNumber numberWithFloat:1.1], [NSNumber numberWithFloat:1.0], nil];


        [popAnimation retain];

}

-(void)popView:(UIView*)view{
        [view setHidden:NO];
        [[view layer] addAnimation:popAnimation forKey:@"transform.scale"];
}

-(void)viewWillAppear:(BOOL)animated{
        [popAnimation setDuration:0.3];
        [newGameButton setHidden:YES];
        [statsButton setHidden:YES];
        [settingsButton setHidden:YES];
        [self performSelector:@selector(popView:) withObject:newGameButton afterDelay:0.25];
        [self performSelector:@selector(popView:) withObject:statsButton afterDelay:0.3];
        [self performSelector:@selector(popView:) withObject:settingsButton afterDelay:0.35];
}

@end

Теперь я сначала подумал, что они не подключены к кнопкам в конструкторе интерфейса пользователя. Но это тоже не сработало. Я пытался переделать весь сценарий. Я попытался перезагрузить скрипт в Xcode. Я даже пытался сделать свою собственную версию. У меня не осталось вариантов. Кто-нибудь знает, что не так с моим скриптом?

Ответы [ 3 ]

3 голосов
/ 10 января 2011

установить свойство объектов в заголовочном файле как @property(nonatomic, retain) IBOutlet UIButton* newGameButton; . . .

и в файле .m синтезировать их, используя @synthesis newGameButton; , сделать это для всех объявленных вами объектов и затем соединить их в IB

1 голос
/ 10 января 2011

Вы загружаете правильный UIViewController ?? Я имею в виду, если вы работаете со сборщиком интерфейса, проверьте, что в вашем главном окне xib используемый вами объект viewController соответствует вашему классу MainMenuViewController

0 голосов
/ 28 июля 2014

Вы сказали, что видите:

«В интерфейсе не найдено объявление свойства newGameButton»

Любое свойство, которое объявлено в .h (заголовок) или .m (реализация), должно быть синтезировано:

     @property (nonatomic,retain) IBOutlet UIButton* newGameButton;

Вот так для ваших свойств в .m (реализация)

    @synthesize newGameButton;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...