1

我想维护数据封装,并NSObject从我的ViewController.m.

我的 Objective-C 工作正常,我的类在ViewController's中实例化viewDidLoad,我可以通过 my 的方法设置、获取和NSLog私有值NSObject

我不能做的是MainStoryboard分配连接插座和收到的操作。我的IBOutlets(aUILabelUIButton) 没有显示在连接检查器中。但是,我ViewController的 .[hm] 文件中有很多对象,我可以设置插座连接。这只是我无法在情节提要工具中查看的这个新文件的对象。

我究竟做错了什么?

//  GameTimer.h
#import <Foundation/Foundation.h>
@interface GameTimer : NSObject {
    UILabel *gameTimerLabel;
    NSTimer *gameTimer;
    unsigned int gameTimerTicks;  
}
@property unsigned int gameTimerTicks;
@property (nonatomic, retain) IBOutlet UILabel *gameTimerLabel;
@property (nonatomic, retain) IBOutlet UIButton *startButton;
// instantiate the timer
- (IBAction)onStartPressed:(id)sender;
// Update the gameTimerLabel, show new value to user
- (void)gameTimerShow;
// selector func for our timer, manages the tick count for all our timers
- (void)gameTimerEvent;
@end

//  FirstViewController.m
#import "FirstViewController.h"
#import "GameTimer.h"
@interface FirstViewController ()
@end
@implementation FirstViewController
GameTimer *myGameClock;
- (void)viewDidLoad
{
    [super viewDidLoad];
    myGameClock = [[GameTimer alloc] init];
    [myGameClock setGameTimerTicks:33*10];  
    [myGameClock gameTimerShow];
    unsigned long myticks = myGameClock.gameTimerTicks;
    NSLog(@"Ticks=%lu", myticks);
}
4

1 回答 1

0

我想你可能对封装控制器的角色感到困惑。由于 Cocoa Touch 框架是一个模型-视图-控制器,控制器是位于视图的用户解释和模型的数据和业务规则之间的“管理器”。因此,您必须将 IBOutlets 和 IBActions 放在 UIViewController 子类中。

将您的计时器构建到一个单独的类中。然后,计时器将被视为模型的一部分,其他控制器或模型的其他对象可以根据需要进行实例化。让你的控制器实例化一个“定时器”。然后使用控制器来管理“定时器”操作。如果需要显示经过的时间,那么 Controller 应该从“Timer”对象中获取经过的时间,并将其放入相应的控件中。如果你需要在“Timer”中设置时间长度,那么Controller将从View的控件中获取值并将其放入“Timer”中。

希望这可以帮助

于 2012-07-07T13:48:04.757 回答