0

私は、私が従ってきた本のコースからプログラムを適応させており、ビューコントローラー、ビュー、および他の2つによって共有される変数を格納するシングルトンの3つのクラスがあります。

ビューコントローラー内にいくつかのコードを記述しようとしています。これにより、ビューがトリガーされ、[self setNeedsDisplay] メッセージが送信されます。ただし、これをインスタンス メソッドとして設定すると、コンパイラは「クラス メソッドなし」例外をスローします。メソッドをクラス メソッドに変更すると、'self' プロパティが機能しなくなります。

正直なところ、私はまだ OOP の一般的な違いの多くについて頭を悩ませているので、状況を完全に把握していない可能性があります。しかし、あるクラスから別のクラスにメッセージを送信して、2番目のクラスが「自己」アクションを開始するようにすることは可能ですか?

メッセージを送信するView Controllerのコードは次のとおりです(現在のコーディング試行で):

- (IBAction)indexChanged:(UISegmentedControl *)sender
{
    switch (sender.selectedSegmentIndex)
    {
        case 0:
        {
            UIColor *selectedColor = [UIColor colorWithRed:1.0
                                                     green:0.0
                                                      blue:0.0
                                                     alpha:1.0];
            NSLog(@"Red button pressed");
            [BNRHypnosisView setCircleColor:selectedColor];
            break;
        }
...

メッセージを受け取るビュー クラスのコードは次のとおりです。

- (void)setCircleColor:(UIColor *)circleColor
{
    [[CDFSingleton colorPicker] changeCircleColor:circleColor];
    [self setNeedsDisplay];
}

それがどれほど関連性があるかはわかりませんが、ここに私のシングルトンクラスがあります:

@implementation CDFSingleton

+ (CDFSingleton *) colorPicker
{
    static CDFSingleton *colorPicker = nil;
    if (!colorPicker) {
        colorPicker = [[super allocWithZone:nil] init];
    }

    return colorPicker;
}

+ (id)allocWithZone:(struct _NSZone *)zone
{
    return [self colorPicker];
}

- (id)init
{
    self = [super init];
    if (self) {
        //In this case, set the default circleColor to light gray
        _circleColor = [UIColor lightGrayColor];
        NSLog(@"Initial colour set to light gray (%@)", _circleColor);
    }

    return self;
}

- (void)changeCircleColor:(UIColor *)color
{
    _circleColor = color;
    NSLog(@"Circle colour changed to %@", color);
    NSLog(@"_circleColor currently set to %@", _circleColor);
}

@end

誰かがこれについて考えや意見を持っているなら、私はそれらを聞きたいです!

4

1 に答える 1