1

データのカプセル化を維持したいので、NSObjectクラス(.hおよび.mファイル)を。から分離しましたViewController.m

私はObjective-Cを正しく機能させており、クラスは'sでインスタンス化されておりViewController、 'sメソッドを介してプライベート値をviewDidLoad設定、取得、および取得できます。NSLogNSObject

私ができないことは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フレームワークはModel-View-Controllerであるため、コントローラーは、ビューのユーザー解釈とモデルのデータおよびビジネスルールの間に位置する「マネージャー」です。したがって、IBOutletsとIBActionsをUIViewControllerサブクラスに配置する必要があります。

タイマーを別のクラスに組み込みます。タイマーはモデルの一部と見なされ、モデルの他のコントローラーまたは他のオブジェクトが必要に応じてインスタンス化できます。コントローラに「タイマー」をインスタンス化させます。次に、コントローラーを使用して「タイマー」操作を管理します。経過時間を表示する必要がある場合、コントローラーは「Timer」オブジェクトから経過時間を取得し、適切なコントロールに配置する必要があります。「タイマー」で時間の長さを設定する必要がある場合、コントローラーはビューのコントロールから値を取得し、それを「タイマー」に配置します。

お役に立てれば

于 2012-07-07T13:48:04.757 に答える